android - Android Room 查询不返回 LiveData
问题描述
我正在尝试从 Android Room 返回 LiveData。我无法将结果作为 LiveData 返回。
这是摘自Dao
@Query("SELECT * FROM transaction_table")
LiveData<List<MyTransaction>> getAllTransactions();
@Query("SElECT * FROM transaction_table")
List<MyTransaction> getMyTransaction();
调用无异常运行,getAllTransactions()
但不返回结果。另一方面,getMyTransactions()
返回选择查询结果。
SDK Version: 23
Room Version: 2.1.0-beta01
编辑:
我在初始化时填充数据库以进行测试。这是代码
private static class PopulateDbAsync extends AsyncTask<Void, Void, Void> {
private static final String TAG = "PopulateDbAsync";
private final TransactionDao mDao;
PopulateDbAsync(TransactionDatabase db) {
mDao = db.transactionDao();
}
@Override
protected Void doInBackground(Void... voids) {
mDao.deleteAll();
MyTransaction transaction = new MyTransaction();
transaction.setCardNumber("0123023403450456");
long result = mDao.insert(transaction);
Log.d(TAG, "doInBackground: " + String.format(Locale.US, "Result %d", result));
transaction = new MyTransaction();
transaction.setCardNumber("0123023403450457");
result = mDao.insert(transaction);
Log.d(TAG, "doInBackground: " + String.format(Locale.US, "Result %d", result));
LiveData<List<MyTransaction>> currentTransactions = mDao.getAllTransactions();
List<MyTransaction> txns = currentTransactions.getValue();
List<MyTransaction> transactions = mDao.getMyTransaction();
if(transactions != null) {
Log.d(TAG, "doInBackground: " + String.format(Locale.US, "Size = %d", transactions.size()));
}
return null;
}
}
解决方案
LiveData 在不观察的情况下无法检索。这就是为什么下面的代码根本不起作用的原因。
LiveData<List<MyTransaction>> currentTransactions = mDao.getAllTransactions();
要使其工作,请先观察 LiveData,然后监听数据更改:
mDao.getAllTransactions().observe(this, new Observer<List<MyTransaction>>() {
@Override
public void onChanged(List<MyTransaction> myTransactionList) {
}
});
推荐阅读
- php - DocuSign API:initialHere 和 signHere 在同一个文档上......或不
- reactjs - 同一函数体中的 React 上下文更新被聚合为具有数据存储的单个事务,这是预期的行为吗?
- git - 推送后如何回到上一个git commit
- python - 如何解压缩 numpy.ndarray 并将其转换为另一个数组?
- php - json_decode 作为全局变量
- c# - 使用 Nuget 共享模型时,如何解决 ASP.NET Framework 的模型绑定问题?
- javascript - 想要将此 jQuery 代码转换为 vanilla JavaScript
- aws-lambda - AWS Lambda (nanoid) 中的 /var/task/node_modules/nanoid/package.json 中的“exports”未定义包子路径“./index.cjs”
- vba - Oracle VBA 连接字符串
- spring-boot - 在 Spring Boot 中绕过 Zscaler