Как написать запрос, который получает живой объект данных с параметром? - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу получить список данных в реальном времени из моей базы данных комнат, который будет содержать все данные, которые имеют дату c.

Мой код DAO:

@Query ("SELECT * FROM data_table WHERE date = :currentDate")
LiveData<List<Data>> getUsefulData(String currentDate);

Класс данных:

@Entity(tableName = "data_table")
public class Data {
@PrimaryKey(autoGenerate = true)
public int id;

public String date;

public float xValue;
public float yValue;

public Data(String date, float xValue, float yValue) {
    this.date = date;
    this.xValue = xValue;
    this.yValue = yValue;
    }
  //getters and setters
}

ViewModel:

public LiveData<List<Data>> getUsefulData(String currentDate){
  return repository.getUsefulData(currentDate);
}

И в своей деятельности я хочу сделать что-то вроде этого:

viewModel = new ViewModelProvider(this).get(DataViewModel.class);
    viewModel.getUsefulData(usefulData).observe(this, new Observer<List<Data>>() {
        @Override
        public void onChanged(List<Data> list) {

        }
    });

Проблема в том, что я не знаю, как написать репозиторий , Обычный метод getAllData не имеет параметров и выглядит следующим образом:

private LiveData<List<Data>> allData;

public DataViewModel(@NonNull Application application) {
    super(application);
    repository = new DataRepository(application);
    allData = repository.getAllData();
}
 public LiveData<List<Data>> getAllData() {
    return allData;
}

Но в моем случае я не знаю, где получить параметр String. И кажется, что я не могу использовать AsyncTask:

 public LiveData<List<Data>> getUsefulData(String currentDate){
     new GetUsefulDataAsyncTask(dataDAO).execute(currentDate);
}

Я должен что-то вернуть. Не могли бы вы помочь мне?

...