Java 房间数据库多事务

Java 房间数据库多事务,java,android,android-room,asynctaskloader,Java,Android,Android Room,Asynctaskloader,我正在使用Room构建一个杂货店列表应用程序,需要在包含我的Dao对象的列表中进行多次更新。如何在对象列表中运行多个更新?我应该在单个线程中运行它们,还是必须为每个对象更新创建多个线程?我目前遇到的问题是,只有列表中的第一个对象被正确更新,其他对象被设置为checked=false,但listed=true。线程完成所有事务更新后,活动应重新加载。我正在使用AsyncTaskLoader,谢谢 杂货刀 装载机等级 可以使用更新多个对象 @更新 public void updateProcessG

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

杂货刀

装载机等级


可以使用更新多个对象

@更新 public void updateProcessGroceryItem。。。杂货店

然后

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

我不明白你的问题。这意味着不将数据更新到数据库或列表中。如果两个更新都未在listview或recyclerview中显示更新的数据。
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;
    }
}
db.groceryItemDao().updateGroceries(groceryItems.toArray(new GroceryItem[groceryItems.size()]));