تابعت درس خاص بقواعد البيانات مع recyclerview وعند محاول تشغيل الطبيق يحدث crash للتطبيق
وتظهر هذا فى ال logcat
Couldn’t read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
برجاء المساعدة فى توضيح السبب
وهذا كلاس databaseaccess وان كان هناك حاجة للكلاسات الاخرى اكتب الكود الخاص بها ان شاء الله
public class DatabaseAccess {
private SQLiteDatabase database;
private SQLiteOpenHelper openHelper;
private static DatabaseAccess instance;
private DatabaseAccess (Context context){
this.openHelper = new MyDatabase(context);
}
public static DatabaseAccess getInstance(Context context){
if (instance == null){
instance = new DatabaseAccess(context);
}
return instance;
}
public void open(){
this.database = this.openHelper.getWritableDatabase();
}
public void close(){
if (this.database!= null){
this.database.close();
}
}
// دالة الاضافة
public boolean insertCar(CAR car) {
ContentValues values = new ContentValues();
values.put(MyDatabase.CAR_CLN_MODEL, car.getModel());
values.put(MyDatabase.CAR_CLN_COLOR, car.getColor());
values.put(MyDatabase.CAR_CLN_DPL, car.getDpl());
long result = database.insert(MyDatabase.CAR_TB_NAME, null, values);
return result != -1;
}
// دالة التعديل
public boolean updateCar(CAR car) {
ContentValues values = new ContentValues();
values.put(MyDatabase.CAR_CLN_MODEL, car.getModel());
values.put(MyDatabase.CAR_CLN_COLOR, car.getColor());
values.put(MyDatabase.CAR_CLN_DPL, car.getDpl());
String args[] = {String.valueOf(car.getId())};
int result = database.update(MyDatabase.CAR_TB_NAME, values, "id = ?", args);
return result > 0;
}
// ارجاع عدد الصفوف فى جدول معين
public long getCarsCount() {
return DatabaseUtils.queryNumEntries(database, MyDatabase.CAR_TB_NAME);
}
// دالة الحذف
public boolean delateCar(CAR car) {
String args[] = {String.valueOf(car.getId())};
int result = database.delete(MyDatabase.CAR_TB_NAME, "id = ?", args);
return result > 0;
}
// دالة الاسترجاع
public ArrayList<CAR> getAllCars(){
ArrayList<CAR> cars = new ArrayList<>();
Cursor cursor = database.rawQuery(" SELECT * FROM " + MyDatabase.CAR_TB_NAME ,null );
// كود التعامل مع الكرسر وتحويله لمصفوفة من النوع CAR
// فحص هل الكيرسور يحتوى على بيانات ام لا
if(cursor != null && cursor.moveToFirst()){
do {
int id = cursor.getInt(cursor.getColumnIndex(MyDatabase.CAR_CLN_ID));
String model = cursor.getString(cursor.getColumnIndex(MyDatabase.CAR_CLN_MODEL));
String color = cursor.getString(cursor.getColumnIndex(MyDatabase.CAR_CLN_COLOR));
double dpl = cursor.getDouble(cursor.getColumnIndex(MyDatabase.CAR_CLN_DPL));
CAR c = new CAR(id,model,color,dpl);
cars.add(c);
}
while (cursor.moveToNext());
cursor.close();
}
return cars;
}
// دالة البحث
public ArrayList<CAR> getCars(String modelSearch){
ArrayList<CAR> cars = new ArrayList<>();
Cursor cursor = database.rawQuery(" SELECT * FROM " + MyDatabase.CAR_TB_NAME +" WHERE " + MyDatabase.CAR_CLN_MODEL + " LIKE ?",new String[]{modelSearch+"%"} );
// كود التعامل مع الكرسر وتحويله لمصفوفة من النوع CAR
// فحص هل الكيرسور يحتوى على بيانات ام لا
if(cursor != null && cursor.moveToFirst()){
do {
int id = cursor.getInt(cursor.getColumnIndex(MyDatabase.CAR_CLN_ID));
String model = cursor.getString(cursor.getColumnIndex(MyDatabase.CAR_CLN_MODEL));
String color = cursor.getString(cursor.getColumnIndex(MyDatabase.CAR_CLN_COLOR));
double dpl = cursor.getDouble(cursor.getColumnIndex(MyDatabase.CAR_CLN_DPL));
CAR c = new CAR(id,model,color,dpl);
cars.add(c);
}
while (cursor.moveToNext());
cursor.close();
}
return cars;
}
}