الحصول على CursorIndexOutOfBoundsException
-
12-12-2019 - |
سؤال
لدي وظيفة لقراءة البيانات من db. ولكن هذا دائمًا ما يُرجع خطأ.. ليس لدي الكثير من المعرفة بنظام Android..أبحث عن بعض المساعدة
10-03 11:33:05.870: E/AndroidRuntime(1321): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.projects.myworldsafe/com.projects.myworldsafe.DeailedView}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
.
String getItemDetailsWp(String id){
System.out.print(id);
SQLiteDatabase db = this.getReadableDatabase();
String[] params=new String[]{id};
String selectQuery = "SELECT Content FROM " + TABLE_ITEMS +" WHERE "+ITEM_ID+"=?";
Cursor c=db.rawQuery(selectQuery,params);
c.moveToFirst();
int index= c.getCount();
int indexd= c.getColumnIndex(ITEM_CONTENT);
System.out.print("Count query"+indexd);
return c.getString(index);
}
المحلول
استخدم هذا:
return c.getString(indexd);
هذا هو ما تريد بالفعل الحصول على قيمة منه.استخدمته index
هناك، والذي يُرجع رقم السجل الموجود في المؤشر.
الممارسة الأفضل أيضًا هي:
String getItemDetailsWp(String id){
System.out.print(id);
SQLiteDatabase db = this.getReadableDatabase();
String[] params=new String[]{id};
String selectQuery = "SELECT Content FROM " + TABLE_ITEMS +" WHERE "+ITEM_ID+"=?";
Cursor c=db.rawQuery(selectQuery,params);
if(c.getCount()>0){
c.moveToFirst();
int index= c.getCount();
int indexd= c.getColumnIndex(ITEM_CONTENT);
System.out.print("Count query"+index);// use index instead of indexd to print total records in query
return c.getString(index);// return value of column number specified in indexd
}
else
return "";// when no records found
}
نصائح أخرى
هنا هو الرمز الأيمن
giveacodicetagpre.هو إرجاع المؤشر بالحجم 0، قم بتغيير التعليمات البرمجية الخاصة بك للتحقق مما إذا كان المؤشر لديه عناصر أم لا، ثم انتقل إلى المركز الأول حسب:
giveacodicetagpre.أصوات مثلك تحاول أن تقرأ من نتائج فارغة.
تحقق من قاعدة البيانات الخاصة بك، يعد الاستعلام مؤشرا للحجم 0، لذلك تحاول الوصول إلى المؤشر في الفهرس 0، وبالتالي الخطأ. إعادة التفكير في الاستعلام وتحقق من قاعدة البيانات للقيم.
ربما يمكنك الوصول إلى مؤشر صف 0.التغيير إلى:
giveacodicetagpre.أنت تحصل على فهرس خارج استثناء الحدود حيث تقوم بعمل عدد من السجلات بدلا من رقم العمود. كأفضل ممارسات الترميز، تحقق المؤشر للسجلات، أي فارغة أو تحتوي على سجلات. استخدم هذا
giveacodicetagpre.