آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

bustanchi  12 سال پیش  12 سال پیش
+1 0

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

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

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

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

+1 0
تیتر سئوال تصحیح شد، بچه ها تو رو به خدا خوب بنویسید دیگه، شدم تیتر تصحیح کن! (12 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
sadeghbarout  12 سال پیش
0 0

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

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

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

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

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

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

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

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

 

خطای لاگ کت

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

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 سال پیش
+1 0

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

این توضیحات برای اروریه که اول صفحه بهش اشاره شده (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"));
0 0
اول ممنون از پاسخ سریعتون. در مورد اول متاسفانه هر چه تلاش کردم نشد و فایل را نشون نداد. به همین خاطر کار سخت تر را انجام دادم! (12 سال پیش)
0 0
پروژه آزمایشیه و جدول ساخته شده و اطلاعات داخلش را هم با SQLmanager بررسی می کنم. مشکلی نداره. در مورد ستون هم اشتباهی در کار نیست چرا که وقتی cursor.getColumnIndex را لاگ می کنم شماره ستون را بهم می ده و مشکلی نداره (12 سال پیش)
0 0
دیتابیس را هم از نو ساختم و دوباره لود کردم مشکل حل نشد. جالب اینجاست که اطلاعات زیادی در دیتا بیس نیست و فقط چند سطر در اون موجوده. واقعا گیج شدم. (12 سال پیش)
0 0
اگه یکبار قبلا برنامه رو تست کردید روی گوشی اون رو پاک کنید و دوباره برنامه رو نصب کنید! چون ورژن دیتابیس رو نبردید بالا! دیتابیس جدید کپی نمیشه و از همون دیتابیس قدیمی استفاده میکنه! و شاید اون ستون یا داده ای که میخواید توی دیتابیس جدید نباشه! (12 سال پیش)
0 0
البته توی گوشی حق با شماست و باید تست کنم با حذف دیتا بیس کار می کنه یا نه. اما روی امولاتور که سر دسته وقتی دیتا بیس را هم حذف می کنم فرقی نمی کنه. کلا گیج شدم. دو یا سه ساعتی هست وقتم را گرفته. (12 سال پیش)
0 0
آهان الان عکست معلوم شد. شما گفتی مشکلم دقیقا همونه و من برای اون ارور راهنمایی کردم . جواب اصلاح شد. احتمالا مشکلت حل میشه. (12 سال پیش)
0 0
اولا تشکر چون مشکل حل شد. البته هنوز یه سوال دارم و اون اینه که من فکر می کردم وقتی دستور سلکت اجرا می شود خود به خود کرسر روی آن ردیفی می رود که در دستور سلکت انتخاب شده که ظاهرا اینطور نیست. حالا که این طور نیست آبا وقتی من دستور moveToNext را اجرا می کنم کرسر به دیتای بعدی با مشخصات فیلتر من نمی رود؟ البته در حال تست این موضوع هم هستم. (12 سال پیش)
0 0
تست کردم. این اتفاق نمی افتد و در بار اول کرسر روی همون گزینه اول می ماند. ممنون. از کمکتون به تنهایی هرگز نمی تونستم پیداش کنم. (12 سال پیش)
0 0
خواهش میکنم :) (12 سال پیش)

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