房间从特定ID的最新输入数据中检索特定数据



这实际上是我上一次发布Android房间数据库的后续问题,检索输入的最新记录的特定值
我使用了回答我问题的人建议的查询,即

@Query("SELECT * FROM newRecord_table WHERE newRecord_table.studentid = :studentId ORDER BY newRecord_table.date, newRecord_table.page DESC ")
LiveData<List<NewRecord>> findLastPage(Integer studentId);  

但它在我的情况下不起作用,然后我使用了另一个查询

@Query("SELECT * FROM newRecord_table ORDER BY cast (jadPage as integer) DESC LIMIT 1")
LiveData<List<NewRecord>> findJadpage();  

当使用带有以下代码的上述查询时

selectStudentName.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(final AdapterView<?> adapterView, View view, final int position, final long l) {
String name = adapterView.getItemAtPosition(position).toString();
recordIds = studentViewModel.getAllStudents().getValue().get(position).getId();
//                    System.out.println("STUDENT ID: " + recordIds);
//
//                    final int list1 = newRecordViewModel.getAllRecords().getValue().get(position).getId();
//                    System.out.println("LIST ID: " + list1);
newRecordViewModel.getJadRecord().observe(AddRecord.this, new Observer<List<NewRecord>>() {
@Override
public void onChanged(List<NewRecord> newRecords) {
// logic to get jad page..
String page = newRecords.get(position).getJadPage();
jadPage.setText(newRecords.get(id).getJadPage(), TextView.BufferType.EDITABLE);
}
});
}
}  

下面是存储库

public class NewRecordRepository {
private NewRecordDAO newRecordDAO;
private StudentDAO studentDAO;
private LiveData<List<NewRecord>> jadeedRecord;
public NewRecordRepository(Application application) {
StudentDatabase database = StudentDatabase.getInstance(application);
newRecordDAO = database.newRecordDAO();
studentDAO = database.studentDAO();
jadRecord = newRecordDAO.findJadpage();
}  
public LiveData<List<NewRecord>> getJadRecord() {
return jadRecord;
}

但我得到了java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
我不知道如何解决这个问题,我在网上搜索了很多解决方案,但它真的不适合我的场景。请帮忙。。非常感谢。

我认为这个错误非常简单。您正在尝试读取只有一个条目(即jadRecord(的列表上0以外的位置。所以解决方案就是总是读取元素0,就像一样

String page = newRecords.get(0).getJadPage(); 

因为这个列表永远不会有一个以上的元素。可能还有其他情况下,这是一个问题

最新更新