العودة إلى موقع برمج

استخدام قواعد البيانات الخارجية مع recyclerview

#1

تابعت درس خاص بقواعد البيانات مع 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;
}

}

#2

يمكنك قراءة معلومات يمكن ان تساعدك على حل هذه المشكلة من الرابط:

1 Like
#3

تم حل المشكلة عندما غيرت هذا الكود

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));

الى

int id = cursor.getInt(0);
String model = cursor.getString(1);
String color = cursor.getString(2);
double dpl = cursor.getdouble(3);
1 Like