Я работаю с SQLite в Android. У меня в таблице только 1 объект, то есть имя. Я хочу сделать Arraylist и использовать его в recyclerview. Но я получаю ошибку, указанную ниже. С ним я понял, что есть проблема с курсором, но теперь не знаю, что.
Ошибка
Failed to read row 0, column -1 from a CursorWindow which has 7 rows, 1 columns.
Код для
public List<FavNames> getFav(){
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String[] sqlMasterSelect = {"name"};
String sqlMasterTable = "FavNames";
qb.setTables(sqlMasterTable);
Cursor c = qb.query(db,sqlMasterSelect,
null,null,null,null,null);
final List<FavNames> masterResult = new ArrayList<>();
if (c.moveToFirst()){
do {
masterResult.add(new FavNames(c
.getString(c.getColumnIndex("name"))));
}while (c.moveToNext());
}
return masterResult;
}
RecyclerView
recyclerView = findViewById(R.id.favRecycler);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
fav = new Database(this).getFav();
adapter = new FavAdapter(getBaseContext(), fav);
recyclerView.setAdapter(adapter);




Убедитесь, что имя столбца - name
.
Для такого простого запроса вам не нужен SQLiteQueryBuilder.
public List<FavNames> getFav(){
SQLiteDatabase db = getReadableDatabase();
String sqlMasterTable = "FavNames";
String sql = "SELECT * FROM " + sqlMasterTable;
Cursor c = db.rawQuery(sql, null);
final List<FavNames> masterResult = new ArrayList<>();
if (c.moveToFirst()){
do {
masterResult.add(new FavNames(c.getString(0).toString()));
}while (c.moveToNext());
}
return masterResult;
}
Это простой rawQuery
Надеюсь, у меня нет опечаток.
Вы уверены, что имя столбца - name?
Это решило ошибку, но теперь она не заполняет Recyclerview
Это еще один вопрос, который вы должны опубликовать после отладки
В любом случае, спасибо.
По-прежнему та же ошибка - «java.lang.IllegalStateException: не удалось прочитать строку 0, столбец -1 из CursorWindow. Убедитесь, что курсор инициализирован правильно, прежде чем обращаться к данным из него».