android - Android Room,如果没有匹配的行,Query 会返回什么?
问题描述
@Dao
interface ExampleDao {
@Query("SELECT * FROM example_table WEHRE id = :id")
fun getExample(id: Int): LiveData<Example>
}
如果数据库中没有匹配的 id,上面的查询返回什么?我猜它不能为空,因为返回类型不可为空。
如果返回类型可以为空,查询是否返回 null?喜欢LiveData<Example>?
或LiveData<Example?>
解决方案
我想你会得到一个liveData
对象,但liveData.value
给你null。
如果你有一个观察者,null
无论它是LiveData<Example>
或LiveData<Example?>
有关更多详细信息,您可以查看yourDao_impl.java
Room 为您生成的内容。
并注意:它不能保证是非空的
@Override
public LiveData<Experiment> queryLiveData(final String profileId) {
final String _sql = "SELECT * FROM experiment WHERE profileId= ?";
return __db.getInvalidationTracker().createLiveData(new String[]{"experiment"}, false, new Callable<Experiment>() {
@Override
public Experiment call() throws Exception {
...
final Experiment _result;
if(_cursor.moveToFirst()) {
_result = new Experiment();
final String _tmpProfileId;
_tmpProfileId = _cursor.getString(_cursorIndexOfProfileId);
} else {
_result = null;
}
return _result;
} finally {
_cursor.close();
}
}
并且不要使用LiveData<Example>?
它似乎没有帮助,但会给你潜在的 NPE。
推荐阅读
- node.js - nodejs 中的 cross-env 命令如何工作?
- javascript - Graphvis - 水平而不是垂直层次结构?
- react-native - 重新打开应用程序时 React Native 不会重新渲染
- javascript - 刷新页面后如何防止数组中的相关项目返回?
- python - 如何在字典中保存输入框
- prolog - 具有重复元素的两个列表的交集
- vuejs2 - CK 编辑器工具栏中的 SourceEditing UI 按钮
- scikit-learn - 如何使用 sklearn 中的 cross_val_score 和 KFold 对平均绝对误差进行评分
- python - 如何使用 python 在 azure vnet 中创建新的容器组
- snowflake-cloud-data-platform - 为什么在尝试表实现时在 dbt 中出现“选择活动仓库”错误,但在视图实现时却没有?