簡體   English   中英

如何通過Android中的asynctask從Hashmap獲取輸出?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM