【问题标题】:how to execute multiple AsyncTask in one class如何在一个类中执行多个 AsyncTask
【发布时间】:2014-03-19 18:21:03
【问题描述】:

我正在使用 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?非常感谢你

【问题讨论】:

  • 是的。 onPostExecute 第一次启动第二次等等...
  • 参考this可能对你有帮助

标签: java android android-asynctask


【解决方案1】:

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

像这样调用你的任务:

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

【讨论】:

    【解决方案2】:

    您可以做的是,您可以在第一个AsyncTaskonPostExecute() 上调用第二个AsyncTask,依此类推。

    例如

    public class FirstAsyncTask extends AsyncTask<Void, Void, Void> {
    
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
    
            }
    
            @Override
            protected Void doInBackground(Void... params) {
                             // your code
    
                return null;
            }
    
            @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);
    
                // new SecondAsyncTask().execute();
        }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      相关资源
      最近更新 更多