2012-07-22 53 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