簡體   English   中英

Android Room查詢不返回LiveData

[英]Android Room query not returning the 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) {

            }
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM