房间数据库多次交易

时间:2018-04-23 05:22:47

标签: java android android-room asynctaskloader

使用Room构建购物清单应用程序,需要在包含我的Dao对象的List中进行多次更新。如何在我的对象列表中运行多个更新?我应该在一个线程中运行它们还是必须为每个对象更新创建多个线程?我目前遇到的问题是,只有List中的第一个对象得到正确更新,而其他对象被设置为checked = false但是lists = true。线程完成所有事务更新后,应重新加载活动。我正在使用AsyncTaskLoader,谢谢!

Grocery DAO

package loaders;

import android.content.AsyncTaskLoader;
import android.content.Context;
import android.util.Log;

import java.util.List;

import data.AppDatabase;
import data.GroceryItem;

import static utils.Constant.IS_CHECKED_FALSE;
import static utils.Constant.IS_LISTED_FALSE;

public class GroceryLoaderUpdate extends AsyncTaskLoader {

    public static final String TAG = "GroceryLoaderUpdate";

    private List<GroceryItem> groceryItems;
    private AppDatabase db;

    public GroceryLoaderUpdate(Context context, List<GroceryItem> groceryItems) {
        super(context);
        this.groceryItems = groceryItems;
    }

    @Override
    protected void onStartLoading() {
        forceLoad();
    }

    @Override
    public Object loadInBackground() {

        db = AppDatabase.getAppDataBase(GroceryLoaderUpdate.this.getContext());

        for (GroceryItem current : groceryItems) {

            if (current.isChecked()) {

                current.setChecked(IS_CHECKED_FALSE);
                current.setListed(IS_LISTED_FALSE);

                db.groceryItemDao().updateGrocery(current);
            }
        }
        return null;
    }
}

装载程序类

hEvent = CreateEvent()

1 个答案:

答案 0 :(得分:0)

您可以使用

更新多个对象

@Update public void updateGroceries(GroceryItem... groceryItem);

然后

db.groceryItemDao().updateGroceries(groceryItems.toArray(new GroceryItem[groceryItems.size()]));