2014-03-19 43 views
0

我正在使用Android SDK 4.0 API14,我想在一個類中運行多個AsyncTask,我希望被調用的異步任務在完成之前等待,但似乎是我即使我測試當前正在執行的狀態,也無法完成此任務。這是我的代碼:如何在一個類中執行多個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?非常感謝你

+0

是的。第一次啓動第二秒的onPostExecute等...... – cosmincalistru

+0

請參考[this](https://github.com/vitkhudenko/test_asynctask)可以幫助你 – Akshay

回答

-1

你可以做的是,你可以撥打AsyncTaskAsyncTask等第二個AsyncTask等。

e.g

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(); 
    }} 
+0

如何用我的代碼實現它? – Menma

2

AsyncTask.executeOnExecutor()方法看看。它將並行運行AsyncTasks。但請確保您運行的任務是相互獨立的。正如文檔中提到的那樣,沒有給出執行任務的順序。

打電話給你的任務是這樣的:

new SpinnerTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
相關問題