簡體   English   中英

無法從 onPostExecute() 的 doInBackGround() 進程獲取值

[英]Can't get the value from doInBackGround() process at onPostExecute()

我正在使用AsyncTask從數據庫中插入、更新和刪除數據。 我用這段代碼插入、更新、刪除,它工作正常。 但是當我想使用 select 並在EditText顯示數據時,我無法從doInBackground()獲取值到onPostExecute()並且它什么也沒顯示。

這是我的代碼:

菜單Utama.java

public class MenuUtama extends Activity {

    /** Called when the activity is first created. */ 
    private TextView nama_user;
    private String nm_user = "";
    private EditText kode, nama, harga, deskripsi; 
    private Button insert, update, delete, cek; 
    private String kode1, nama1, harga1, deskripsi1; 
    JSONArray data = null;

    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main2);

        kode = (EditText) findViewById(R.id.editKode); 
        nama = (EditText) findViewById(R.id.editNama); 
        harga = (EditText) findViewById(R.id.editHarga); 
        deskripsi = (EditText) findViewById(R.id.editDes); 
        cek = (Button) findViewById(R.id.btnCek);
        insert = (Button) findViewById(R.id.buttonInsert); 
        update = (Button) findViewById(R.id.buttonUpdate); 
        delete = (Button) findViewById(R.id.buttonDelete); 
        nama_user = (TextView) findViewById(R.id.textView3);

        Intent i = getIntent();
        nm_user = i.getStringExtra("nama_user"); 
        nama_user.setText(nm_user);


        insert.setOnClickListener(new OnClickListener() { 

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub 

                String url = "";
                url = "http://192.168.1.10/crudsederhana/aksi.php";

                try {
                    String ko = URLEncoder.encode(kode.getText().toString(),"utf-8");
                    String n = URLEncoder.encode(nama.getText().toString(),"utf-8"); 
                    String hr = URLEncoder.encode(harga.getText().toString(),"utf-8");
                    String d = URLEncoder.encode(deskripsi.getText().toString(), "utf-8");

                    url += "?a=insert&kd=" + ko + "&nm=" + n + "&hrg=" + hr + "&deskripsi=" + d;

                    new CRUD().execute(url);
                }

                catch (UnsupportedEncodingException e) { 
                    e.printStackTrace();
                }
            }
        });

        update.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) { 
                String url = "";

                url = "http://192.168.1.10/crudsederhana/aksi.php";

                try { 
                    String ko = URLEncoder.encode(kode.getText().toString(),"utf-8");
                    String n = URLEncoder.encode(nama.getText().toString(),"utf-8");
                    String hr = URLEncoder.encode(harga.getText().toString(),"utf-8");
                    String d = URLEncoder.encode(deskripsi.getText().toString(), "utf-8");

                    url += "?a=update&kd=" + ko + "&nm=" + n + "&hrg=" +hr+ "&des=" + d;

                    new CRUD().execute(url);
                } 

                catch (UnsupportedEncodingException e) { 
                    e.printStackTrace();
                }
            }
        });

        delete.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub 
                String url = "";
                kode1 = kode.getText().toString(); 
                url = "http://192.168.1.10/crudsederhana/aksi.php?a=delete&kd=" + kode1;

                new CRUD().execute(url);
            }
        });

        cek.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub 
                String url = "";
                kode1 = kode.getText().toString();
                url = "http://192.168.1.10/crudsederhana/aksi.php?a=read&kd="+kode1;

                new CRUD().execute(url);
            }
        });
    }

    public class CRUD extends AsyncTask<String, String, String> { 
        String success;
        String kode_d, nama_d, harga_d, des_d;

        @Override
        protected void onPreExecute() { 
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... params) {
            JSONParser jParser = new JSONParser(); 
            JSONObject json = jParser.getJSONFromUrl(params[0]);

            try {
                success = json.getString("success"); 
                Log.e("error", "nilai sukses=" + success); 
                JSONArray hasil = json.getJSONArray("login"); 

                if (success.equals("1")) {
                    for (int i = 0; i < hasil.length(); i++) {
                        JSONObject c = hasil.getJSONObject(i);

                        kode_d = c.getString("kd"); 
                        nama_d = c.getString("nm"); 
                        harga_d = c.getString("hrg"); 
                        des_d = c.getString("deskripsi");
                    }
                }

                else {
                    Log.e("erro", "tidak bisa ambil data 0");
                }
            }

            catch (Exception e) {
                // TODO: handle exception
                Log.e("erro", "tidak bisa ambil data 1");
            }

            return kode_d;
        }

        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            kode.setText(kode_d); 
            nama.setText(nama_d); 
            harga.setText(harga_d); 
            deskripsi.setText(des_d);
        }
    }
}

JSONParser.java

public class JSONParser {
    static InputStream is = null; 
    static JSONObject jObj = null;
    static String json = "";

    //  constructor 
    public JSONParser() {
    }

    public JSONObject getJSONFromUrl(String url) {
        // Making HTTP request 
        try {

            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient(); 
            HttpPost httpPost = new HttpPost(url);
            HttpResponse httpResponse = httpClient.execute(httpPost); 
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        }

        catch (UnsupportedEncodingException e) { 
            e.printStackTrace();
        }

        catch (ClientProtocolException e) { 
            e.printStackTrace();
        }

        catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);

            StringBuilder sb = new StringBuilder(); 
            String line = null;

            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }

            is.close();
            json = sb.toString();
        }

        catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " +e.toString());
        }

        // try parse the string to a JSON object 
        try {
            jObj = new JSONObject(json);
        }

        catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " +e.toString());
        }

        // return JSON String 
        return jObj;
    }

    public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {

        // Making HTTP request 
        try {
            // check for request method 
            if (method == "POST") {

                // request method is POST
                // defaultHttpClient 
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url); 
                httpPost.setEntity(new UrlEncodedFormEntity(params)); 
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity(); 
                is = httpEntity.getContent();
            }

            else if (method == "GET") {
                // request method is GET 
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8"); 
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url); 
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity(); 
                is = httpEntity.getContent();
            }
        }

        catch (UnsupportedEncodingException e) { 
            e.printStackTrace();
        }

        catch (ClientProtocolException e) { 
            e.printStackTrace();
        }

        catch (IOException e) { 
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder(); 
            String line = null;

            while ((line = reader.readLine()) != null) { 
                sb.append(line + "\n");
            }

            is.close();
            json = sb.toString();
        }

        catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " +e.toString());
        }

        // try parse the string to a JSON object 
        try {
            jObj = new JSONObject(json);
        }

        catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " +e.toString());
        }

        // return JSON String 
        return jObj;
    }
}

這是因為您沒有從doInBackground()返回任何值(始終返回 null)並且您沒有在onPostExecute(String result)形式參數中使用“字符串”。 垃圾進垃圾出

你的doInBackground()只返回一個字符串return kode_d; 然后在您的onPostExecute(String result) (需要一個字符串)中,您使用為空的 kode_d。

如果您希望返回所有這些值,請創建一個ArrayList() ,在最后doInBackground()返回它並通過迭代將其放入onPostExecute(ArrayList result)並將其傳遞給您的onPostExecute(ArrayList result)

更好的是創建一個對象並將值添加到每個字段。 您的字段是kode_d, nama_d, harga_d, des_d

這就是 onPostExecute 所做的

/**
 * <p>Runs on the UI thread after {@link #doInBackground}. The
 * specified result is the value returned by {@link #doInBackground}.
 * To better support testing frameworks, it is recommended that this be
 * written to tolerate direct execution as part of the execute() call.
 * The default version does nothing.</p>
 * 
 * <p>This method won't be invoked if the task was cancelled.</p>
 *
 * @param result The result of the operation computed by {@link #doInBackground}.
 *
 * @see #onPreExecute
 * @see #doInBackground
 * @see #onCancelled(Object) 
 */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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