2012-07-22 51 views
2

我使用的AsyncTask用這樣的循環保存在數據庫中的一些數據:如何在循環中使用asynctask?

for(int i=0;i<5;i++){ 
new Loader().execute(i); 
} 

,並在我的AsyncTask類doInBackground方法是這樣的:

@Override 
     protected Void doInBackground(Integer... params) { 
      db.insert(params[0]); 
      return null; 
     } 

其正在執行,但每次它在數據庫中插入第一個值i?如何使用相應的循環工作?

+0

你不能用多個參數執行一次AsyncTask嗎? – biegleux 2012-07-22 06:50:16

+0

我是新的在asynctask,所以我不知道太多 – Reyjohn 2012-07-22 06:51:18

回答

2

你可以這樣做:

@Override 
    protected Void doInBackground(Integer... params) { 
     int count = params.length; 
     db.beginTransaction(); 
     try { 
      for (int i = 0; i < count; i++) { 
       db.insert(params[i]); 
      } 
      db.setTransactionSuccessful(); 
     } finally { 
      db.endTransaction(); 
     } 
     return null; 
    } 

和你打電話new Loader().execute(1, 2, 3, 4, 5);

節省內存只創建一個AsyncTask對象實例

+0

如果我不知道長度? – Reyjohn 2012-07-22 07:12:23

+0

如果你的循環執行可變數量的時間,比如說n,Integer [] ints = new Integer [n]; for(int i = 0; i biegleux 2012-07-22 07:21:01

+0

這個ine工作,謝謝:) – Reyjohn 2012-07-22 08:35:50

1

嘗試讓裏面的任務循環。

Integer arr[] = new Integer[2]; 
    arr[0]=0; 
    arr[1]=1; 

    new Loader.execute(arr); 

    @Override 
      protected Void doInBackground(Integer... params) { 

       foreach (Integer i : params) 
       db.insert(params[i]); 
       return null; 
      } 
+0

我在asynctask中有更多的工作要做,我必須留在循環中,但我無法弄清楚如何解決這個問題 – Reyjohn 2012-07-22 07:19:03

+0

無論如何,你可以在循環中做你想做的事情。取決於它是什麼,您可能需要使用處理程序與主線程進行通信。 – mtekeli 2012-07-22 07:25:23