Выбрать из базы данных в MVVM - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть проект mvvm с комнатой, LiveData. Я хочу выбрать несколько строк из базы данных для отображения в WebView. Но я не знаю, как выбрать из базы в моей деятельности. Это мой Dao

@Dao
public interface ReceiptDao {

   @Insert
   void insert(Receipt receipt);

   @Query("SELECT Receipt FROM Receipt " +
    "WHERE Person.removed = 0 AND Receipt.personId = :personId")
    LiveData<List<Receipt>> findByPersonId(int personId);

   @RawQuery(observedEntities = Receipt.class)
   List<Receipt> filterList(SupportSQLiteQuery driveLastName);
 ...

и репозиторий

public class ReceiptRepository {
 private ReceiptDao receiptDao;
 private LiveData<List<Receipt>> receiptListLiveData;

 public ReceiptRepository(Application application, int personId) {
   DataBase dataBase = DataBase.getDataBase(application);
   receiptDao = dataBase.receiptDao();
   receiptListLiveData = dataBase.receiptDao().findByPersonId(personId);
 }

 public LiveData<List<Receipt>> getReceiptListLiveData() {
   return receiptListLiveData;
 }

 public void insert(Receipt receipt) {
   new InsertAsyncTask(receiptDao).execute(receipt);
 }

 public void update(Receipt receipt) {
   new UpdateAsyncTask(receiptDao).execute(receipt);
 }


public List<Receipt> filterList(String driverName, String dischargePlace, int minNetWeight,
                                      int maxNetWeight, String loadingFromDate, String loadingToDate,
                                      String dischargeFromDate, String dischargeToDate) {
    String query = "SELECT Receipt.* FROM Receipt " +
            "WHERE Person.removed = 0 ";

    ...
    SimpleSQLiteQuery sqLiteQuery = new SimpleSQLiteQuery(query);
    return receiptDao.filterList(sqLiteQuery);
}

/**/
private static class InsertAsyncTask extends AsyncTask<Receipt, Void, Void> {
   private ReceiptDao receiptDao;

   private InsertAsyncTask(ReceiptDao receiptDao) {
       this.receiptDao = receiptDao;
   }

   @Override
   protected Void doInBackground(Receipt... receipts) {
       receiptDao.insert(receipts[0]);
       return null;
   }
}
...

Как я не могу выбрать из таблиц и иметь resultList в моей деятельности по созданию динамического c html. Я не могу использовать репозиторий в действии, и я получаю ошибку ниже. Должен ли я использовать viewModel?

java.lang.RuntimeException: Unable to start activity ComponentInfo{net.liyan.accounting/....view.Receipt.PreviewPdfActivity}: 
java.lang.NullPointerException: Attempt to invoke virtual method 
'java.util.List .....repository.ReceiptRepository.filterList(
   java.lang.String, java.lang.String, int, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String)'
on a null object reference
...