2

我正在使用带有如下循环的 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?如何与相应的这个循环一起工作?

4

2 回答 2

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通过只创建一个对象实例来节省内存

于 2012-07-22T06:54:35.723 回答
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;
            }
于 2012-07-22T06:54:50.590 回答