我只是对此感到好奇..我最近刚使用过房间,想了解更多关于它的信息..查询是否会失败?顺便说一下,我在插入或查询时使用 AsyncTask ..我没有任何回调..我只是执行它然后保存..每当我查询时,我都是这样做的:
try {
List<Object> objectList = new GetObjectTask.execute().get();
} catch (Exception e) {
e.printStack();
}
这是正确的方法吗?
这是 GetObjectTask 类
public class GetObjectTask extends AsyncTask<Void, Void, List<Object>> {
public GetObjectTask() {
}
@Override
protected List<Object> doInBackground(Void... voids) {
return AppDatabaseHelper.getInstance().getObjectDao().getAllObject();
}
}
最佳答案
is this the proper way?
这取决于您的设计。
- 实现此功能需要您自行实现生命周期感知数据更新。这反过来将导致添加样板代码来管理配置更改。您还需要添加额外的代码来解析列表并相应地更新 View
- 您的 Activity 将因用于从数据库访问数据的代码而变得臃肿。理想情况下,您应该避免这种情况,并让 Activity 只负责处理 View 数据。 Activity 不应该关心数据源。
正确的方法是:
实现 ViewModel架构组件并让 ViewModel 处理数据库操作。
由于 Room 能够返回
LiveData
,您可以轻松观察变化并相应地更新您的 View 。查看observable queries为此目的
关于java - Android Room Persistence 中的插入、更新、删除和查询是否会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50939455/