2013-01-12 63 views
1

需要帮助从task2开始更具体地查看代码,这是错误来自哪里,但我无法弄清楚。假设如果for循环不是adviseable,那么我需要的代码是否还有其他选择?除了这个getInformations,这个类实际上是从另外两个我没有上传的类中调用的。那为什么我需要返回drawable。如果谢谢for循环内部异步

private AsyncTask<String, Void, String> task; 
private AsyncTask<String, Void, String> task1; 
private AsyncTask<String, Void, Drawable[]> task2; 
public void getInformations(){ 
    task = new AsyncTask<String, Void, String>() { 
     ProgressDialog dialog; 
     Bundle bundle; 
     String res; 
     @Override 
     protected void onPreExecute(){ 
      dialog = new ProgressDialog(Thoughts.this, ProgressDialog.STYLE_SPINNER); 
      dialog.setMessage("Loading Data...");   
      dialog.setCancelable(false); 
      dialog.setCanceledOnTouchOutside(false);  

      dialog.show(); 
     } 

     @Override 
     protected String doInBackground(String... arg0) { 
      bundle = getIntent().getExtras(); 
      res = bundle.getString("Username"); 
      return res; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      dialog.dismiss(); 
      username = result;  

      task1 = new AsyncTask<String, Void, String>() { 
       ProgressDialog dialog1; 
       ArrayList<NameValuePair> postParameters; 
       String response1; 
       String res1; 
       @Override 
       protected void onPreExecute(){ 
        thoughtsDynamicListView = (ListView) findViewById(R.id.lvThoughts);      

        postParameters = new ArrayList<NameValuePair>(); 

        dialog1 = new ProgressDialog(Thoughts.this, ProgressDialog.STYLE_SPINNER); 
        dialog1.setMessage("Loading Data...");   
        dialog1.setCancelable(false); 
        dialog1.setCanceledOnTouchOutside(false); 

        dialog1.show(); 
       } 

       @Override 
       protected String doInBackground(String... arg0) { 
        try { 
         response1 = CustomHttpClient.executeHttpPost("http://whatstherex.info/getT.php", postParameters); 

         res1 = response1.toString(); 

         res1 = res1.replaceAll("null", ""); 

         thoughtsList = res1.toString(); 

         return thoughtsList; 
        }catch(Exception e){ 
         res1 = e.toString(); 
         return res1; 
        } 
       } 

       @Override 
       protected void onPostExecute(String result1) { 
        dialog1.dismiss(); 

        feed = result1.split("[_]"); 

        task2 = new AsyncTask<String, Void, Drawable[]>() {   
         ProgressDialog dialog2; 
         InputStream is; 
         Drawable[] d; 
         Drawable p4, p8, p12, p16, p20, p24, p28, p32, p36, p40, p44, p48, p52, p56, p60, p64, p68, p72, p76, p80, p84, p88, p92, p96, p100; 
         @Override 
         protected void onPreExecute(){ 
          dialog2 = new ProgressDialog(Thoughts.this, ProgressDialog.STYLE_SPINNER); 
          dialog2.setMessage("Loading Data...");   
          dialog2.setCancelable(false); 
          dialog2.setCanceledOnTouchOutside(false); 

          dialog2.show(); 
         } 

         @Override 
         protected Drawable[] doInBackground(String... src) { 
          for(int i=0; i<src.length; i++){ 
           try 
           { 
            is = (InputStream) new URL(src[i]).getContent(); 
            d[i] = Drawable.createFromStream(is, "src name"+i); 
           }catch (Exception e) { 
            e.toString(); 
           } 
          } 
          return d; 
         } 

         @Override 
         protected void onPostExecute(Drawable[] result2) { 
          dialog2.dismiss(); 

          p4 = result2[1]; 
          p8 = result2[2]; 
          p12 = result2[3]; 
          p16 = result2[4]; 
          p20 = result2[5]; 
          p24 = result2[6]; 
          p28 = result2[7]; 
          p32 = result2[8]; 
          p36 = result2[9]; 
          p40 = result2[10]; 
          p44 = result2[11]; 
          p48 = result2[12]; 
          p52 = result2[13]; 
          p56 = result2[14]; 
          p60 = result2[15]; 
          p64 = result2[16]; 
          p68 = result2[17]; 
          p72 = result2[18]; 
          p76 = result2[19]; 
          p80 = result2[20]; 
          p84 = result2[21]; 
          p88 = result2[22]; 
          p92 = result2[23]; 
          p96 = result2[24]; 
          p100 = result2[25]; 

          thoughtsInputs.add(new ThoughtsData(feed[1].toString(), feed[2].toString(), feed[3].toString(), p4)); 
          thoughtsInputs.add(new ThoughtsData(feed[5].toString(), feed[6].toString(), feed[7].toString(), p8)); 
          thoughtsInputs.add(new ThoughtsData(feed[9].toString(), feed[10].toString(), feed[11].toString(), p12)); 
          thoughtsInputs.add(new ThoughtsData(feed[13].toString(), feed[14].toString(), feed[15].toString(), p16)); 
          thoughtsInputs.add(new ThoughtsData(feed[17].toString(), feed[18].toString(), feed[19].toString(), p20)); 
          thoughtsInputs.add(new ThoughtsData(feed[21].toString(), feed[22].toString(), feed[23].toString(), p24)); 
          thoughtsInputs.add(new ThoughtsData(feed[25].toString(), feed[26].toString(), feed[27].toString(), p28)); 
          thoughtsInputs.add(new ThoughtsData(feed[29].toString(), feed[30].toString(), feed[31].toString(), p32)); 
          thoughtsInputs.add(new ThoughtsData(feed[33].toString(), feed[34].toString(), feed[35].toString(), p36)); 
          thoughtsInputs.add(new ThoughtsData(feed[37].toString(), feed[38].toString(), feed[39].toString(), p40)); 
          thoughtsInputs.add(new ThoughtsData(feed[41].toString(), feed[42].toString(), feed[43].toString(), p44)); 
          thoughtsInputs.add(new ThoughtsData(feed[45].toString(), feed[46].toString(), feed[47].toString(), p48)); 
          thoughtsInputs.add(new ThoughtsData(feed[49].toString(), feed[50].toString(), feed[51].toString(), p52)); 
          thoughtsInputs.add(new ThoughtsData(feed[53].toString(), feed[54].toString(), feed[55].toString(), p56)); 
          thoughtsInputs.add(new ThoughtsData(feed[57].toString(), feed[58].toString(), feed[59].toString(), p60)); 
          thoughtsInputs.add(new ThoughtsData(feed[61].toString(), feed[62].toString(), feed[63].toString(), p64)); 
          thoughtsInputs.add(new ThoughtsData(feed[65].toString(), feed[66].toString(), feed[67].toString(), p68)); 
          thoughtsInputs.add(new ThoughtsData(feed[69].toString(), feed[70].toString(), feed[71].toString(), p72)); 
          thoughtsInputs.add(new ThoughtsData(feed[73].toString(), feed[74].toString(), feed[75].toString(), p76)); 
          thoughtsInputs.add(new ThoughtsData(feed[77].toString(), feed[78].toString(), feed[79].toString(), p80)); 
          thoughtsInputs.add(new ThoughtsData(feed[81].toString(), feed[82].toString(), feed[83].toString(), p84)); 
          thoughtsInputs.add(new ThoughtsData(feed[85].toString(), feed[86].toString(), feed[87].toString(), p88)); 
          thoughtsInputs.add(new ThoughtsData(feed[89].toString(), feed[90].toString(), feed[91].toString(), p92)); 
          thoughtsInputs.add(new ThoughtsData(feed[93].toString(), feed[94].toString(), feed[95].toString(), p96)); 
          thoughtsInputs.add(new ThoughtsData(feed[97].toString(), feed[98].toString(), feed[99].toString(), p100));     

          adaptor = new ThoughtsCustomFeedAdaptor(Thoughts.this, R.layout.thoughtsdata, thoughtsInputs); 
          thoughtsDynamicListView.setAdapter(adaptor); 

         } 
        };      
        task2.execute(feed[4], feed[8], feed[12], feed[16], feed[20], feed[24], feed[28], feed[32], feed[36], feed[40], feed[44], feed[48], 
          feed[52], feed[56], feed[60], feed[64], feed[68], feed[72], feed[76], feed[80], feed[84], feed[88], feed[92], feed[96], feed[100]);          
       } 
      }; 
      task1.execute(); 
     } 
    }; 
    task.execute(); 
} 
+0

你可以把你的logcat吗? – Goo

回答

0

我认为这是不可能链的AsyncTask这样的,因为的AsyncTask应该是从UI线程启动。

你应该做的,而不是推出直接任务

Message m = new Message(); 
m.what = 1; // 1 or 2 depends of your task 
mhandler.sendMessage(m); 

随着你的活动处理程序(这是在UI线程中执行)

mhandler = new Handler(getMainLooper(),new Callback() { 

      @Override 
      public boolean handleMessage(Message msg) { 
       switch (msg.what) { 
       case (1): 
        task1.execute(); 
        break; 
       case(2):  
        break; 
        task2.execute(); 

       return false; 
      } 
     }); 

而在你的AsyncTask把类似的东西,这个处理程序的任务将从UI线程开始。