![](/img/trans.png)
[英]HashMap get(Key) function not working in Android AsyncTask
[英]How do I get the output from Hashmap through asynctask in Android?
public class 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類是否實際從DB中檢索信息。 這是DBHelper的代碼。 它應該將Hashmap返回到confirmDeletePopUp
類中的Hashmap變量。 然后將TextViews設置為找到的數據。 但它永遠不會返回任何數據。 相反,我只是獲得該類的gui彈出活動,只有字段中的提示。
// 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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.