【发布时间】:2019-05-21 12:46:01
【问题描述】:
我正在尝试从 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;
}
}
【问题讨论】:
-
does not return results是什么意思?您需要observe {LiveData才能获得最终的结果。 -
向我们展示您拨打
getMyTransaction()或getAllTransactions()的代码。 -
我已经更新了这个问题。请结帐。
-
正如EpicPandaForce所说:你必须
observe()你的LiveData -
@EpicPandaForce 我会尝试观察
标签: android android-room android-lifecycle