公共(public)类 confirmDeletePopUp
从另一个名为 removeUser
的类中的 EditText 获取并发送电子邮件。然后它通过 getDetailsAsync
类发送该电子邮件并调用 DBHelper getDeleteDetails
类来获取它需要的信息。
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.HashMap;
public class confirmDeletePopUp extends AppCompatActivity {
private TextView tvAccountLevel, tvFirstName, tvLastName, tvEmail, tvID;
String removeEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_confirm_delete_pop_up);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
getWindow().setLayout((int) (width * .8), (int) (height * .8));
tvID = (TextView) findViewById(R.id.tvID);
tvAccountLevel = (TextView) findViewById(R.id.tvAccountLevel);
tvFirstName = (TextView) findViewById(R.id.tvFirstName);
tvLastName = (TextView) findViewById(R.id.tvLastName);
tvEmail = (TextView) findViewById(R.id.tvEmail);
final Button confirmDelete = (Button) findViewById(R.id.tvConfirmDelete);
// Send request
getDetailsAsync detailsAsync = new getDetailsAsync();
detailsAsync.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
confirmDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (tvID.getText().toString().equals("") || tvEmail.getText().toString().equals("")){
Toast.makeText(confirmDeletePopUp.this, "ID & Email are empty", Toast.LENGTH_SHORT).show();
}else {
confirmDeleteAsync cda = new confirmDeleteAsync();
cda.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
});
}
// get email to remove from remove user class
public void fromRemoveUser(String emailToRemove){
removeEmail = emailToRemove;
}
private class getDetailsAsync extends AsyncTask<Void, Void, Void>{
HashMap<String, String> details = new HashMap<>();
@Override
protected void onPreExecute() {
}
@Override
protected Void doInBackground(Void... voids) {
DBHelper db = new DBHelper();
details = db.getDeleteDetails(removeEmail);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
setValues(details.get("id"), details.get("accountLevel"),
details.get("firstName"), details.get("lastName"),
details.get("email"));
}
}
private void setValues (String id, String al, String fn, String ln, String em){
tvID.setText(id);
tvAccountLevel.setText(al);
tvFirstName.setText(fn);
tvLastName.setText(ln);
tvEmail.setText(em);
}
我的问题是我无法判断 DBHelper 类是否真的从数据库中检索信息。这是 DBHelper 的代码。它应该将 Hashmap 返回到 confirmDeletePopUp
类中的 Hashmap 变量。然后将 TextViews 设置为找到的数据。但它从不返回任何数据。相反,我只是获得了该类的 gui 弹出 Activity ,其中只有字段中的提示。
// get details for deleting user
public HashMap<String, String> getDeleteDetails (String email){
HashMap<String, String> detail = new HashMap<>();
String getDeleteDetails = "SELECT FROM * accounts WHERE email = '" + email + "'";
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(getDeleteDetails);
while(rs.next()){
detail.put("id", rs.getString(1));
detail.put("accountLevel", rs.getString(2));
detail.put("firstName", rs.getString(3));
detail.put("lastName", rs.getString(4));
detail.put("email", rs.getString(7));
}
} catch (SQLException e){
e.getStackTrace();
}
return detail;
}
最佳答案
只需更改 AsyncTask
中的类型即可返回 HashMap
,如下所示:
private class getDetailsAsync extends AsyncTask<Void, Void, HashMap<String,String>> {
@Override
protected void onPreExecute() {
}
@Override
protected HashMap<String, String> doInBackground(Void... voids) {
DBHelper db = new DBHelper();
HashMap<String, String> details = new HashMap<>();
details = db.getDeleteDetails(removeEmail);
return details;
}
@Override
protected void onPostExecute(HashMap<String, String> hashMap) {
setValues(details.get("id"), details.get("accountLevel"),
details.get("firstName"), details.get("lastName"),
details.get("email"));
}
}
您将在onPostExecute
方法中获取返回的详细信息HashMap
。
关于java - 如何通过 Android 中的 asynctask 从 Hashmap 获取输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40969088/