بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

کرش حین خواندن یک فیلد مشخص از بانک اطلاعات

مدیریت گفتگو
bustanchi 12 سال پیش
آخرین تغییر: 12 سال پیش

موقع اجرای برنامم با این ارور روبه رو میشم و برنامه کرش میکنه , علت کرش چیه ؟

من هرچی دنبال مشکل میگردم توی اون خطی که اشاره کرده متوجه خطا نمیشم .

خطا به اون خطی اشاره میکنه که با فلش مشخص کردم !!

 public ArrayAdapter adapter;


@Override
protected void onResume() {
G.currentActivity = this;
super.onResume();

if (adapter != null) {
adapter.notifyDataSetChanged();
}

}


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a);

ListView lstContent = (ListView) findViewById(R.id.lstContent);

adapter = new Adapter(G.notes);
lstContent.setAdapter(adapter);

Cursor cursor = G.database.rawQuery("SELECT * FROM m", null);
G.notes.clear();

while (cursor.moveToNext()) {
String title = cursor.getString(cursor.getColumnIndex("title"));
---> String matn = cursor.getString(cursor.getColumnIndex("matn"));
StructNote note = new StructNote();
note.title = title;
note.matn = matn;
G.notes.add(note);
}
cursor.close();

adapter.notifyDataSetChanged();
}

نظرات

uncocoder 12 سال پیش
تیتر سئوال تصحیح شد، بچه ها تو رو به خدا خوب بنویسید دیگه، شدم تیتر تصحیح کن!

پاسخ‌ها 3

sadeghbarout 12 سال پیش

منم چندین بار با این مشکل مواجه شدم ! مشکل کارم توی همون دستور query م بود

یه بار دیگه دستور queryت و اسم table ت رو چک کن و توی sqlite manager هم این query رو تست کن و مطمئن شو که درسته.

درضمن مطمئن شو که بار قبلی که یه cursor باز کردی ، حتما بسته باشیش

نتیجه رو خبر بده ما هم یاد بگیریم ;)

نظرات

bustanchi 12 سال پیش
مشکلم حل شد , یه بار دیگه دیتابیس رو ساختم و برنامه رو اجرا کردم مشکل حل شد ...
sadeghbarout 12 سال پیش
ممنون از اینکه خبر دادی ;)
hamed 12 سال پیش

ببخشید این سوال را دوباره بالا میارم. می خواستم بدونید دنبالش گشتم اما پیدا نکردم!

من هم مثل این دوستمون همین مشکل را دارم. یعنی دقیقا مشابه. حالا چطوری حلش کنم؟

این خطای لاگ کته که به همون خطی که در زیر خواهم گذاشت اشاره داره:

 

خطای لاگ کت

و این هم کد خطی که ازش ایراد می گیره با خط بالاییش:

Cursor cursor = G.databaseFormula.rawQuery("SELECT * FROM formula WHERE formolaCondition LIKE 'new'", null);
String text = cursor.getString(cursor.getColumnIndex("varA"));

البته به این صورت هم آزمایش کردم که نشد (و البته خیلی حالات دیگر)

String text = cursor.getString(cursor.getColumnIndex("varA")).toString();

نظرات

sadeghbarout 12 سال پیش

اولا لطفا عکس رو از طریق همین پنل آپلود کن که مثل الان لینکش نشکنه.

این توضیحات برای اروریه که اول صفحه بهش اشاره شده (row 0 , col-1) (چون لینک عکس شکسته بود و گفتن دقیقا همون ارور رو دارن من توضیحات رو برای اون ارور دادم)

این خطا به خاطر عدم پیدا کردن اون ستون در دیتابیسه. حالا ممکنه اسم ستون رو اشتباه نوشته باشید، اون table رو ایجاد نکرده باشید، کلا دیتابیس جدید رو یادتون رفته جایگزین کرده باشید یا دیتابیس جدید رو توی برنامه جایگزین کردید ولی توی گوشی کاربر دیتابیس جدید کپی نمیشه و از این جور مسائل.

ولی اصل مشکل همون پیدا نکردن اون ستونه.

حالا تا اونجایی که من یادمه اون دوستمون مشکلش با از نو ساختن دیتابیس حل شده بود (که الان نمیدونم چرا جوابشو حذف کرده!)

شما هم تست کن ایشالا که درست شه :)

 

ویرایش

این توضیحات برای ارور سوال بالاست (IndexOutOfBoundException):

شما داری cursor رو میسازی و بعد میخونیش بدون اینکه به سطر بعدی در cursor بری

کدهات رو اینجوری بذار:

 Cursor cursor = G.databaseFormula.rawQuery("SELECT * FROM formula WHERE formolaCondition LIKE 'new'", null);
cursor.moveNext();
String text = cursor.getString(cursor.getColumnIndex("varA"));

نظرات

hamed 12 سال پیش
اول ممنون از پاسخ سریعتون. در مورد اول متاسفانه هر چه تلاش کردم نشد و فایل را نشون نداد. به همین خاطر کار سخت تر را انجام دادم!
hamed 12 سال پیش
پروژه آزمایشیه و جدول ساخته شده و اطلاعات داخلش را هم با SQLmanager بررسی می کنم. مشکلی نداره. در مورد ستون هم اشتباهی در کار نیست چرا که وقتی cursor.getColumnIndex را لاگ می کنم شماره ستون را بهم می ده و مشکلی نداره
hamed 12 سال پیش
دیتابیس را هم از نو ساختم و دوباره لود کردم مشکل حل نشد. جالب اینجاست که اطلاعات زیادی در دیتا بیس نیست و فقط چند سطر در اون موجوده. واقعا گیج شدم.
h_r_v 12 سال پیش
اگه یکبار قبلا برنامه رو تست کردید روی گوشی اون رو پاک کنید و دوباره برنامه رو نصب کنید! چون ورژن دیتابیس رو نبردید بالا! دیتابیس جدید کپی نمیشه و از همون دیتابیس قدیمی استفاده میکنه! و شاید اون ستون یا داده ای که میخواید توی دیتابیس جدید نباشه!
hamed 12 سال پیش
البته توی گوشی حق با شماست و باید تست کنم با حذف دیتا بیس کار می کنه یا نه. اما روی امولاتور که سر دسته وقتی دیتا بیس را هم حذف می کنم فرقی نمی کنه. کلا گیج شدم. دو یا سه ساعتی هست وقتم را گرفته.
sadeghbarout 12 سال پیش
آهان الان عکست معلوم شد. شما گفتی مشکلم دقیقا همونه و من برای اون ارور راهنمایی کردم . جواب اصلاح شد. احتمالا مشکلت حل میشه.
hamed 12 سال پیش
اولا تشکر چون مشکل حل شد. البته هنوز یه سوال دارم و اون اینه که من فکر می کردم وقتی دستور سلکت اجرا می شود خود به خود کرسر روی آن ردیفی می رود که در دستور سلکت انتخاب شده که ظاهرا اینطور نیست. حالا که این طور نیست آبا وقتی من دستور moveToNext را اجرا می کنم کرسر به دیتای بعدی با مشخصات فیلتر من نمی رود؟ البته در حال تست این موضوع هم هستم.
hamed 12 سال پیش
تست کردم. این اتفاق نمی افتد و در بار اول کرسر روی همون گزینه اول می ماند. ممنون. از کمکتون به تنهایی هرگز نمی تونستم پیداش کنم.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .