如何在一个类中执行多个AsyncTask

时间:2014-03-19 10:14:15

标签: java android android-asynctask

我使用Android SDK 4.0 API14并且我希望在一个类中运行多个AsyncTask,我希望被调用的异步任务在它完成之前等待,但似乎我无法完成即便我测试当前正在执行的状态。这是我的代码:

if(isNetworkAvailable()){
        new SpinnerTask().execute();
        new RiderTask().execute();
        new BankTask().execute();
        }

    //spinner bank
        public class BankTask extends AsyncTask<Void, Void, String>{
            String url="http://128.21.30.37:8080/E-Policy/ios/spaj_bank.htm?type=pusat";
            public BankTask(){
            this.url=url;
            System.out.println(url);}
            @Override
            protected void onPreExecute() {
            super.onPreExecute();
            dialog=new ProgressDialog(Menu_SPPAJ.this);
            dialog = ProgressDialog.show(Menu_SPPAJ.this, "Mohon Menunggu", "Penarikan data Rider..");}
            @Override
            protected String doInBackground(Void... params) {
                // TODO Auto-generated method stub
                    String result = "";
                    try {
                        result = Connection.get(url);
                        System.out.println("tes " + result);
                        } catch (Exception e) {
                        // TODO: handle exception
                        result = "";    
                        }
                        return result;
                        }
            @Override
            protected void onPostExecute(String result) {
            dialog.dismiss();
            // TODO Auto-generated method stub
            super.onPostExecute(result);
//          Response(result.replace("\n", "").trim());
            System.out.println("done for Bank");
            try {
                JSONObject jsonObject = new JSONObject(result);

                JSONArray PRODUK = jsonObject.getJSONArray("BANK PUSAT");

                for (int i=0; i<PRODUK.length();i++){

                    JSONObject spinner = PRODUK.getJSONObject(i);
                            String LSBP_NAMA = spinner.optString("LSBP_NAMA");
                            int LSBP_ID = spinner.optInt("LSBP_ID");
                        helper.InsertBank(LSBP_ID, LSBP_NAMA);
//                      ListSpinner.add(VarSpinner);
                        System.out.println("tes VarSpinner");
                    }
                }catch (Exception e) {
                Log.d("TES", e.getMessage());
            }
            }
            }  
//spinner bank
            public class CabBankTask extends AsyncTask<Void, Void, String>{
            String url="http://128.21.30.37:8080/E-Policy/ios/spaj_bank.htm?type=cabang";
                public CabBankTask(){
                this.url=url;
                System.out.println(url);}
                @Override
                    protected void onPreExecute() {
                    super.onPreExecute();
                    dialog=new ProgressDialog(Menu_SPPAJ.this);
                    dialog = ProgressDialog.show(Menu_SPPAJ.this, "Mohon Menunggu", "Penarikan data Rider..");}
                    @Override
                    protected String doInBackground(Void... params) {
                        // TODO Auto-generated method stub
                            String result = "";
                            try {
                                result = Connection.get(url);
                                System.out.println("tes " + result);
                                } catch (Exception e) {
                                // TODO: handle exception
                                result = "";    
                                }
                                return result;
                                }
                    @Override
                    protected void onPostExecute(String result) {
                    dialog.dismiss();
                    // TODO Auto-generated method stub
                    super.onPostExecute(result);
//                  Response(result.replace("\n", "").trim());
                    System.out.println("done for Cabang");
                    try {
                        JSONObject jsonObject = new JSONObject(result);

                        JSONArray PRODUK = jsonObject.getJSONArray("BANK CABANG");

                        for (int i=0; i<PRODUK.length();i++){

                            JSONObject spinner = PRODUK.getJSONObject(i);
                                    int LSBP_ID = spinner.optInt("LSBP_ID");
                                    int LBN_ID = spinner.optInt("LBN_ID");
                                    String LBN_NAMA = spinner.optString("LBN_NAMA");
                                helper.InsertCabBank(LSBP_ID, LBN_ID, LBN_NAMA);
//                              ListSpinner.add(VarSpinner);
                                System.out.println("tes VarSpinner");
                            }
                        }catch (Exception e) {
                        Log.d("TES", e.getMessage());
                    }
                    }
                    }

    //spinner produk    
        public class SpinnerTask extends AsyncTask<Void, Void, String>{
//          String url="http://epolicy.sinarmasmsiglife.co.id/ios/spaj_prod.htm?model=1";
            String url="http://128.21.30.37:8080/E-Policy/ios/spaj_prod.htm?type=bancass";
                    public SpinnerTask(){
                        this.url=url;
                        System.out.println(url);
                    }
                    @Override
                    protected void onPreExecute() {
                        super.onPreExecute();
                        dialog=new ProgressDialog(Menu_SPPAJ.this);
//                      dialog = ProgressDialog.show(Menu_SPPAJ.this, "Mohon Menunggu", "Penarikan data Produk..");
                    }
                    @Override
                    protected String doInBackground(Void... params) {
                        // TODO Auto-generated method stub
                                    String result = "";
                                    try {
                                        result = Connection.get(url);
                                        System.out.println("tes " + result);
                                    } catch (Exception e) {
                                        // TODO: handle exception
                                        result = "";    
                                    }
                                    return result;
                                }
                                @Override
                                protected void onPostExecute(String result) {
                                    // TODO Auto-generated method stub
//                                  dialog.dismiss();
                                    super.onPostExecute(result);
                                    fetchResponse(result.replace("\n", "").trim());
                                    System.out.println("done for product");
                                }
                                }

                private void fetchResponse(String result) {
                    if (!result.equals("")) {
                        try {
                            JSONObject jsonObject = new JSONObject(result);

                            JSONArray PRODUK = jsonObject.getJSONArray("PRODUK");

                            for (int i=0; i<PRODUK.length();i++){

                                JSONObject spinner = PRODUK.getJSONObject(i);
                                        String LSBS_ID = spinner.optString("LSBS_ID");
                                        String LSBS_NAME = spinner.optString("LSBS_NAME");
                                    helper.InsertSpin_Produk(LSBS_ID, LSBS_NAME);
//                                  ListSpinner.add(VarSpinner);
                                    System.out.println("tes VarSpinner");

                                    JSONArray PRODUK1 = spinner.getJSONArray("SUB_PRODUK");
                                    for (int j=0; j<PRODUK1.length();j++){
                                        JSONObject sub = PRODUK1.getJSONObject(j);
                                        String LSDBS_NUMBER = sub.optString("LSDBS_NUMBER");
                                        String LSDBS_NAME = sub.optString("LSDBS_NAME");
                                        helper.InsertSpin_SubProduk(LSBS_ID,LSBS_NAME,LSDBS_NUMBER, LSDBS_NAME);

                                        System.out.println("tes VarSpinner 1\2");
                                    }
                                }
                            }
                        catch (Exception e) {
                            Log.d("TES", e.getMessage());
                        }
                    }
                }    
//Rider
    public class RiderTask extends AsyncTask<Void, Void, String>{
            String url="http://128.21.30.37:8080/E-Policy/ios/spaj_prod.htm?type=rider";
                    public RiderTask(){
                        this.url=url;
                        System.out.println(url);
                    }
                    @Override
                    protected void onPreExecute() {
                        super.onPreExecute();
                        dialog=new ProgressDialog(Menu_SPPAJ.this);
                        dialog = ProgressDialog.show(Menu_SPPAJ.this, "Mohon Menunggu", "Penarikan data Rider..");
                    }
                    @Override
                    protected String doInBackground(Void... params) {
                        // TODO Auto-generated method stub
                                    String result = "";
                                    try {
                                        result = Connection.get(url);
                                        System.out.println("tes " + result);
                                    } catch (Exception e) {
                                        // TODO: handle exception
                                        result = "";    
                                    }
                                    return result;
                                }
                                @Override
                                protected void onPostExecute(String result) {
                                    dialog.dismiss();
                                    // TODO Auto-generated method stub
                                    super.onPostExecute(result);
                                    Response(result.replace("\n", "").trim());
                                    System.out.println("done for ridern");
                                }
                                }   

有没有办法在一个类中运行多个Asynctask?非常感谢你

2 个答案:

答案 0 :(得分:2)

查看AsyncTask.executeOnExecutor()方法。它将并行运行AsyncTasks。但请确保您运行的任务彼此独立。正如文档中所提到的,没有给出任务执行的给定顺序。

按照以下方式调用您的任务:

new SpinnerTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

答案 1 :(得分:-1)

您可以做的是,您可以在第一个AsyncTask的{​​{1}}上拨打第二个onPostExecute(),依此类推。

e.g

AsyncTask