2015-02-06 77 views
0

我下載從網頁的某些數據的作爲下停止的循環:要執行DownloadWebpage任務時滿足某些條件

private void marketTableShow() throws IOException { 
     for (int i = 1; i < 10; i++) { 
      String stri = String.valueOf(i); 
      String stringUrl = ""http://live-nse.herokuapp.com/?symbol="+ stri 
      new DownloadWebpageTask().execute(stringUrl); 

     mHandler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       String strmsg = msg.toString(); 
       if (strmsg.contains("[]")) { 
        //to stop the loop 
       } 
      } 
     }; 
    } 
} 

private class DownloadWebpageTask extends 
     AsyncTask<String, Integer, String> { 
    protected String doInBackground(String... urls) { 

     for (String url : urls) { 
      try { 
       strcontent = downloadUrl(url); 
      } catch (IOException e) { 
       Dialog(e); 
      } 
     } 
     return strcontent; 
    } 

    @Override 
    protected void onPostExecute(String results) { 
     System.out.println(results); 
     Message msg = new Message(); 
     msg.obj = results; 
     mHandler.sendMessage(msg); 
    } 
} 

現在我想的是,當某些條件即

if (strmsg.contains("[]")) { 
    ***//to stop the loop*** 
} 

是遇到比沒有更多的下載,並在此之後,我應該退出for循環。這是不是休息的命令在這一點上。什麼是可能的方式。謝謝

回答

0

一個快速的答案是使用根據您需要退出循環的距離而有所變化或返回。 更優雅的方式是拋出一個異常:它也可以讓你檢測到你已經離開了循環,因爲你已經滿足了你的條件。 不要忘記清理(關閉溪流等)在您離開之前。

0

您嘗試退出的for將在Handler發生火災之前很長時間完成,因爲您同時啓動了所有AsyncTasks。粗略地......他們都會在一個毫秒之內開始。 Handler不會在數毫秒內觸發。

爲了阻止他們midcourse,你將需要一些更復雜的編碼。也許緩衝下載並檢查WeakReference以查看緩衝區負載之間是否仍需要該內容。

相關問題