gpt4 book ai didi

java - 使用 Room 库获取最近插入的行 ID

转载 作者:行者123 更新时间:2023-12-04 09:51:48 24 4
gpt4 key购买 nike

我正在使用房间持久性库来更新数据库。我被困在我想获取最近插入记录的 id 的地方。

我知道使用 long as 作为 insert 方法的返回类型会返回 id。但是我通过 View 模型访问这个 Dao 方法。

我的DAO方法如下:

//MyDao
@Insert
long insert(RecordItem record);

通过执行以下操作从存储库访问此方法:
//MyRepository
public class MyRepository {
private MyDao myDao;

public MyRepository(@NonNull Application application) {
MainDatabase mainDatabase = MainDatabase.getInstance(application);
myDao = mainDatabase.myDao();
}

public void insert(RecordItem record) {
MainDatabase.dbWriteExecutor.execute(() -> {
myDao.insert(record);
});
}
}

并从 viewmodel 调用 repository 方法,如下所示:
//MyViewModel
public void insert(RecordItem record) {
repository.insert(record);
}

最后 viewmodel 方法为:
//MyActivity
myViewModel.insert(record);

我的问题是,我不知道如何通过 viewmodel 方法获得长时间返回。我尝试在存储库中这样做
//MyRepository
public class MyRepository {
private MyDao myDao;
private long id;

public MyRepository(@NonNull Application application) {
MainDatabase mainDatabase = MainDatabase.getInstance(application);
myDao = mainDatabase.myDao();
}

public long insert(RecordItem record) {
MainDatabase.dbWriteExecutor.execute(() -> {
id = myDao.insert(record);
});
return id;
}
}

以及随后对 viewmodel 方法的更改。

但是,它返回 0,我想这是因为 insert 方法是在不同的线程上执行的,并且一旦到达语句就会返回 id(如果我错了,请纠正我)。

提前致谢。

最佳答案

您可以针对您的问题采用以下解决方案:
创建回调接口(interface)如下:

public interface DbInsertCallback {
void onInsert(long insertedItemId);
}
然后在你的存储库上使用这个接口(interface) insert(RecordItem record)方法如下用法:
public class MyRepository {

// ... Some repo code ...

public void insert(RecordItem record, DbInsertCallback callback) {
MainDatabase.dbWriteExecutor.execute(() -> {
long id = myDao.insert(record);
callback.onInsert(id);
});
}

// ... Rest of repo code ...
}
并在调用者站点(即 ViewModel 和 Activity)上进行必要的更改,以提供此回调类的对象作为参数。要实现此接口(interface),您可以创建该接口(interface)的对象以及实现,或者像提供 一样在上下文中传递它。 this .

关于java - 使用 Room 库获取最近插入的行 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62005613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com