我正在试验Room数据库。我不希望我的数据被观察到,我只想从数据库中获取一次数据。如何使用 MVVM 实现这一目标?
我面临的问题:如果我尝试在没有数据的情况下获取数据AsyncTask:无法访问主线程上的数据库,因为它可能会长时间锁定 UI(如预期),如果我使用AsyncTask,该方法返回 nullList作为方法在AsyncTask完成之前返回。
道类:
@Query("SELECT * FROM student_table where StudentName = :studentName")List<Student> getStudentWithSameName(String studentName);
Run Code Online (Sandbox Code Playgroud)
存储库:
public List<Student> getAllStudentWithSameName(String studentName) {
new GetAllStudentWithSameNameAsyncTask(studentDao).execute(studentName);
return studentsWithSameName;
}
private class GetAllStudentWithSameNameAsyncTask extends AsyncTask< String,Void, List<Student> > {
StudentDao studentDao;
public GetAllStudentWithSameNameAsyncTask(StudentDao studentDao) {
this.studentDao = studentDao;
}
@Override
protected List<Student> doInBackground(String... strings) {
List<Student> students = studentDao.getStudentWithSameName(strings[0]);
return students;
}
@Override
protected void onPostExecute(List<Student> students) {
studentsWithSameName = …Run Code Online (Sandbox Code Playgroud)