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

واکشی اطلاعات از دیتابیس

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

من توی برنامم وقتی یک کوئری به دیتابیس میزنم که title و text اون رو برام بخونه از دیتابیس بیاره , چون text اون توی دیتابیس حجم سنگینی از متن رو میخواد وارد برنامه بکنه و من اون رو توی یه متغیر از نوع String میریزم موقع وارد شدن به اون اکتیویتی برنامه کرش میکنه .

باید چیکار کنم که این اتفاق نیافته و بخوبی اطلاعات رو بیاره و کرش نکنه ؟

آیا باید از Theread ها استفاده کرد ؟

نظرات

مجتبی یگانه 12 سال پیش
علت این نیست ! ، سورس کد کامل اکتیویتی رو بزارید + لاگ کرش
sadeghbarout 12 سال پیش
از thread ها که استفاده بکن ولی همونطور که دوستمون اشاره کرد احتمالش کمه دلیلش این باشه! تست کن ببین وقتی حجم مطالبم داخل اون فیلد کم میکنی بازم کرش میکنه؟(اگه کرد که همون مواردی که دوستمون گفت رو بذار)
مجتبی یگانه 12 سال پیش
اگر خواندن مثلا صد هزار بایت ممکن نبود ، دیتابیس هرگز اجازه ذخیره ی این حجم رو نمیداد ، مثلا ما میبینیم موقع وارد کردن اطلاعات ، با خطای overflow به معنی سر ریزی و پر حجم بودن داده ی واریزی رو به رو میشیم !

پاسخ‌ها 4

bustanchi 12 سال پیش

لاگ کرش میگه که نمیتونم مقدار Blob رو به string تبدیل کنم درصورتی که من نوع اون خونه رو توی دیتابیس از نوع text انتخاب کردم ....

  public ArrayAdapter adapter;


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

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

}


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.l);

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

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

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

while (cursor.moveToNext()) {
String subject = cursor.getString(cursor.getColumnIndex("subject"));
String text = cursor.getString(cursor.getColumnIndex("text"));
StructNote note = new StructNote();
note.title = subject;
note.txt = text;
G.notes.add(note);
}
cursor.close();

adapter.notifyDataSetChanged();
}

نظرات

مجتبی یگانه 12 سال پیش
کد شما از نظر من هیچ مشکلی نداره ، البته من به لیست ویو ها مسلط نیستم ، اما شما لاگ هم بزار که ببنیم خطا تو چه خطی و چه نوعی هست ، ترجمش رو نخواستیم که آخه ، ضمنا شما که فیلد Blob ندارید ، فقط subject و text توی سورس اتفاده شده !
bustanchi 12 سال پیش

متن ارور این هست :

 Unable to convert Blob to String

و دقیقا داره از خطی که توش متغیر text از نوع string تعریف شده هست خطا میگیره !!

نظرات

مجتبی یگانه 12 سال پیش
Spirit جوون اینجوری که شما میگی باهاش درگیری لفظی هم داشتی ! ، داداش این شد راه حل ؟ ، خدایی 2 دقیقه خندیدم همون از نو ساختن دیتابیس منتطقی تره آخه خوب
مجتبی یگانه 12 سال پیش

داده ای که به متغییر String واریز میکنید ، string نیست . از toString استفاده کنید 

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

نظرات

bustanchi 12 سال پیش
بازهم همون Error رو میده و مشکل حل نمیشه !!!
bustanchi 12 سال پیش

متن دیتابیس رو کم که میکنم جواب میده ولی درحالتی که مقداری متن داخلش هست برنامه کرش میکنه .!!!

نظرات

bustanchi 12 سال پیش
از همه دوستان ممنونم مشکلم حل شد ؛ مشکل همونی بود که sprint عزیز گفت که من بعنوان حسن ختام این بخش نظرشو میزارم که بچه ها استفاده کنند : دوست عزیز ، منم قبلا یه این مشکل برخوردم ، تو دیتابیسم هیچ فیلدی با متغیر boolean نداشتم و این خطا کلافم کرده بود ، و این طوری حلش کردم : چند باری از دیتابیس خروجی ها مختلف گرفتم (xml , txt , ...) و از نو دیتابیس رو ساختم تا بالاخره کوتاه اومد.
sadeghbarout 12 سال پیش
منظور از دیتابیس خروجی ها گرفتم دقیقا چیه؟ منظور با همون SQLite manager خروجی گرفتی؟!
bustanchi 12 سال پیش
من یه بار دیگه دیتابیس رو از نو ساختم با SQLite Manager و مشکل حل شد . قبل از اون با نرم افزار Navicat for SQLite کار میکردم که این مشکل رو بوجود آورد .

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