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

لود (load) اطلاعات از دیتابیس(حل شد)

amir.kenarang  9 سال پیش  9 سال پیش
0 0

سلام دوستان

من یه برنامه دارم که تعداد زیادی اطلاعات قراره وارد برنامه بشه. ( حالا فرض میکنیم فقط یدونه EditText داریم)

من میخوام اطلاعات رو وارد این editText کنم و زمانی که برنامه رو مجددا باز میکنم با یه دکمه این اطلاعات نمایش داده بشه(لود بشه). برای ذخیره اطلاعات مشکلی ندارم، و تونستم اطلاعات خودم را ذخیره کنم. اما زمانی که برای لود اطلاعات از query مورد نظرم استفاده میکنم برنامه کرش میکنه.

کدهای ذخیره سازی اطلاعات:

  // Insert Values Method
public void insert(String word) {

ContentValues contentValues = new ContentValues();

contentValues.put(dbOpenHelper.WORD_WORD, word);

database.insert(dbOpenHelper.TABLE_NAME, dbOpenHelper.WORD_WORD, contentValues);
}

کد های لود اطلاعات در  dbHandler

public String display(int id, int field) {

Cursor cursor = database.rawQuery("SELECT * FROM " + dbOpenHelper.TABLE_NAME + " WHERE id=" + id, null);
cursor.moveToFirst();
String word = cursor.getString(field);
return word;
}

کدهای لود اطلاعات در ActivityMain

private void loadFunction() {
handler.open();
edt1.setText(handler.display(id, 1));
handler.close();
}
0 0
سلام تو لاگتون چی چاپ میکنه؟ (9 سال پیش)
0 0
از این دو قسمت مربوط به لود و id ایراد میگیره (9 سال پیش)
0 0
خب چه ایرادی میگیره؟ (9 سال پیش)
0 0
ایرادشو ننوشته 07-14 1549.245 30040-30040/amir.app.pro.testdatabase E/AndroidRuntime: FATAL EXCEPTION: main android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 at android.database.AbstractCursor.checkPosition(AbstractCursor.java:424) at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) at amir.app.pro.testdatabase.dbHandler.updateDisplay(dbHandler.java:43) at amir.app.pro.testdatabase.ActivityMain.loadFunction(ActivityMain.java:58) at amir.app.pro.testdatabase.ActivityMain.access$000(ActivityMain.java:11) at amir.app.pro.testdatabase.ActivityMain$2.onClick(ActivityMain.java:42) at android.view.View.performClick(View.java:4204) at android.view.View$PerformClick.run(View.java:17355) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5041) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.main(Native Method) (9 سال پیش)
0 0
احتمالاً داری اسم خونه های تو اشتباه میدی یک بار چک کن خونه های دیتابیس از 0 شروع میشه الان شما توی اون خطت زدی 1 یعنی fild دوم و احتمالا همچین به fildموجود نیست (9 سال پیش)
0 0
نه مشکل از اون نیست، وقتی 0 هم میزارم کرش میکنه (9 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
amir.kenarang  9 سال پیش
+1 0

Update:

کوئری مربوط به display را به کد زیر تغییر دادم

public String display(int row, int fild) {
Cursor cursor = database.query(dbOpenHelper.TABLE_NAME, null, null, null, null, null, null);
cursor.moveToPosition(row);
String word = cursor.getString(fild);
return word;
}

الان گزینه ای که ذخیره شده رو نشون میده ولی فقط اولین موردی رو که ذخیره شده نشون میده. من میخوام آخرین مورد رو نشون بده (یعنی آخرین id ذخیره شده)

در ضمن در ActivityMain یک int id=0; قرار دادم

پاسخ به سوال 
amir.kenarang  9 سال پیش
+1 0

مشکل حل شد، از کوئری دوم استفاده کردم اما به جای moveToPosition از moveToLast استفاده کردم.


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