Я пытаюсь перечислить все элементы из базы данных, используя RecyclerView.Однако я получаю сообщение об ошибке, что курсор не может найти индекс моего столбца.Я проверил, правильно ли указано имя столбца и есть ли данные в таблице
Ошибка:
E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 9 rows, 7 columns.
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.nex_.mobiledev_assignment1, PID: 24735
java.lang.IllegalStateException: Couldn't read row 0, col -1 from
CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
DatabaseHelper
private static DatabaseHelper ourInstance;
private static final String DATABASE_NAME = "Assignemnt2.db";
private static final String TRACKABLE_TABLE = "trackable";
private static final String TRACKABLE_COL_1 = "ID";
private static final String TRACKABLE_COL_2 = "Name";
private static final String TRACKABLE_COL_3 = "Des";
private static final String TRACKABLE_COL_4 = "URL";
private static final String TRACKABLE_COL_5 = "Category";
public static final String TRACKING_TABLE = "tracking";
public static final String TRACKING_COL_1 = "ID";
public static final String TRACKING_COL_2 = "title";
private static final String TRACKING_COL_3 = "startTime";
public static final String TRACKING_COL_4 = "meetTime";
private static final String TRACKING_COL_5 = "endTime";
private static final String TRACKING_COL_6 = "meetLocation";
private static final String TRACKING_COL_7 = "trackableID";
public static synchronized DatabaseHelper getInstance(Context context){
if (ourInstance == null){
ourInstance = new DatabaseHelper(context.getApplicationContext());
}
return ourInstance;
}
private DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TRACKABLE_TABLE + " (ID INTEGER PRIMARY KEY, NAME TEXT, DES TEXT, URL TEXT, CATEGORY TEXT) ");
db.execSQL("create table " + TRACKING_TABLE + " (ID TEXT PRIMARY KEY, TITLE TEXT, STARTTIME TEXT, MEETTIME TEXT, ENDTIME TEXT, MEETLOCATION TEXT, TRACKABLEID INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TRACKABLE_TABLE);
db.execSQL("DROP TABLE IF EXISTS " + TRACKING_TABLE);
onCreate(db);
}
public boolean insertTrackaleData(int ID, String name, String description, String URL, String category){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(TRACKABLE_COL_1, ID);
contentValues.put(TRACKABLE_COL_2, name);
contentValues.put(TRACKABLE_COL_3, description);
contentValues.put(TRACKABLE_COL_4, URL);
contentValues.put(TRACKABLE_COL_5, category);
double result = db.insert(TRACKABLE_TABLE, null, contentValues);
if (result == -1){
return false;
}else {
return true;
}
}
public boolean insertTrackingData(String ID, String title, String startTime, String meetTime, String endTime, String meetLocation, int trackableID){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues2 = new ContentValues();
contentValues2.put(TRACKING_COL_1, ID);
contentValues2.put(TRACKING_COL_2, title);
contentValues2.put(TRACKING_COL_3, startTime);
contentValues2.put(TRACKING_COL_4, meetTime);
contentValues2.put(TRACKING_COL_5, endTime);
contentValues2.put(TRACKING_COL_6, meetLocation);
contentValues2.put(TRACKING_COL_7, trackableID);
double result = db.insert(TRACKING_TABLE, null, contentValues2);
if (result == -1){
return false;
}else {
return true;
}
}
public Cursor getAllItems(){
SQLiteDatabase db = this.getReadableDatabase();
return db.query(
TRACKING_TABLE,
null,
null,
null,
null,
null,
TRACKING_COL_2 + " DESC"
);
}
TrackingAdapter Class
private Context mContext;
private Cursor mCursor;
public TrackingListRecycleViewAdapter(Context context, Cursor cursor){
mContext = context;
mCursor = cursor;
}
public class TrackingListViewHolder extends RecyclerView.ViewHolder{
public TextView trackingTitle;
public TextView trackingMeetTime;
public TrackingListViewHolder(View itemView) {
super(itemView);
trackingTitle = itemView.findViewById(R.id.trackingTitle);
trackingMeetTime = itemView.findViewById(R.id.trackingMeetTime);
}
}
@Override
public TrackingListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mContext);
View view = inflater.inflate(R.layout.tracking_list_item, parent, false);
return new TrackingListViewHolder(view);
}
@Override
public void onBindViewHolder(TrackingListViewHolder holder, int position) {
if (!mCursor.moveToPosition(position)){
return;
}
System.out.println("Cursor: " + mCursor.getCount());
String title = mCursor.getString(mCursor.getColumnIndex(DatabaseHelper.TRACKING_COL_1));
String meetTime = mCursor.getString(mCursor.getColumnIndex(DatabaseHelper.TRACKING_COL_4));
holder.trackingTitle.setText(title);
holder.trackingMeetTime.setText(meetTime);
}
//Get all trackings
@Override
public int getItemCount() {
return mCursor.getCount();
}
Я мог бы что-то здесь упустить, поэтому любая гепатит очень бы оценила