PDA

View Full Version : خطا در نمایش ArrayList



Sync.Master
یک شنبه 21 مهر 1392, 10:32 صبح
سلام

این کد منه تو قسمت اول مشکلی نیست و تمام اطلاعات تو لاگ نمایش داده میشه ولی تو نمایش آرایه خطای خارج از محدوده آرایه میده ، مشکل کجاست به نظرتون ، همه چی به نظرم درسته ،


SQLiteDatabase db = openOrCreateDatabase(G.dbName, 0, null);
Cursor cursor = db.rawQuery("SELECT * FROM tbl WHERE dcat=" + cat,
null);
ArrayList<Cursor> list = new ArrayList<Cursor>();
if (cursor != null && cursor.moveToFirst()) {
do {
list.add(cursor);
Log.i(G.LOG,
"id = " + cursor.getInt(0) + " cat = "
+ cursor.getInt(1) + " title = "
+ cursor.getString(2));
} while (cursor.moveToNext());
}
db.close();

Log.i(G.LOG, "a" + list.size());

// مشکل از اینجا شروع میشه

for (int i = 0; i < list.size(); i++) {
Log.i(G.LOG,
"id = " + list.get(i).getInt(0) + " cat = "
+ list.get(i).getInt(1) + " title = "
+ list.get(i).getString(2));
}


خطا :

android.database.CursorIndexOutOfBoundsException: Index 10 requested, with a size of 10

abbasalim
یک شنبه 21 مهر 1392, 11:11 صبح
سلام
list.size() رو بکنید
list.size()-۱


چون از صفر شروع میشه پس اگه ساز 14 باشه از 0-13 باید پیش برید

Sync.Master
یک شنبه 21 مهر 1392, 11:22 صبح
نشد ، بازم همون خطا رو داد ، سایزش 10 هستش ، حتی وقتی میخوام از آرایه بدون حلقه فقط یه cursor رو بگیرم (مثلا شماره 4) و یه string رو نمایش بدم باز همین خطا رو میده

rubiks.kde
یک شنبه 21 مهر 1392, 11:41 صبح
این خطا مربوط به آرایه نیست بلکه مربوط میشه به خود Cursor که دلیلشم اینه که شما توی حلقه اول که دارید اطلاعات رو چاپ میکنید Cursor رو با استفاده از moveToNext() به آخر رسوندید و حالا که دارید توی حلقه دوم چاپ میکنید چون آخره نمیتونه دسترسی داشته باشه.

قبل از حلقه دوم Cursor رو به اول برگردونید moveToFirst().

Sync.Master
یک شنبه 21 مهر 1392, 11:57 صبح
ممنون جناب rubiks.kde ، حل شد با راهنماییتون
کد اصلاح شده :
cursor.moveToFirst();
for (int i = 0; i < list.size(); i++) {
Log.i(G.LOG,
"id = " + list.get(i).getInt(0) + " cat = "
+ list.get(i).getInt(1) + " title = "
+ list.get(i).getString(2));
list.get(i).moveToNext();
}