public class confirmDeletePopUp
從名爲removeUser
的另一個類的EditText中獲取併發送電子郵件。然後它通過getDetailsAsync
類發送該電子郵件並調用DBHelper getDeleteDetails
類來獲取所需的信息。如何通過Android中的asynctask從Hashmap獲取輸出?
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的代碼。它應該在confirmDeletePopUp
類中將Hashmap返回到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;
}
getDeleteDetails中的查詢看起來像可能存在SQL注入漏洞 - 如果可以,請使用參數綁定。 – halfer