ورود

View Full Version : sqlite متد



ali1393
پنج شنبه 28 آبان 1394, 23:35 عصر
من میخواستم متدی بنویسم که id هر ردیف از ستون IMG رو بگیره و بفرسته به یک کلاس دیگه.چکار باید بکنم؟

majid_7
جمعه 29 آبان 1394, 10:43 صبح
میشه واضح تر توضیح بدی؟
مشکلت با دستورات sql هست؟
دقیقا کجاش رو گیر کردی؟

ali1393
جمعه 29 آبان 1394, 11:48 صبح
یه کتاب دارم که هر داستانش یه متن داره و یک عکس .
متن هر داستان از ستون M_TEXT میگیره و نمایش میده
در کلاس دیتابیس هم متد زیر رو برای گرفتن id عکسها دارم :
public byte[] getpic(int id) {
Cursor cu = mydb.rawQuery("select * from content where ID= " + id, null);


cu.moveToFirst();
byte s[] = cu.getBlob(5);
return s;
}
حالا نمیدونم تو کلاس اصلی چطور باید عکس هر داستان و نمایش بدم!!!

msroid
جمعه 29 آبان 1394, 12:17 عصر
خب شما خود عکس رو تو دیتابیس ذخیره کردی یا آدرس عکس رو...؟؟

همونجوری که داستان رو نمایش میدی عکس رو هم نمایش میدی دیگه من نفهمیدم مشکلت کجاست...!!

شما در هر سطر از جدول یه ID داری که با استفاده از اون متن داستان رو بیرون میکشی و نمایش میدی. خب با همون ID به فیلد مربوط به عکس هم دسترسی داری و حالا یا خودش رو ذخیره کردی یا آدرسش رو بالاخره فرقی نمیکنه اگه خودش باشه که مستقیم همون رو استفاده میکنی و اگرم آدرس عکس رو تو دیتابیس ذخیره کردی خب بازم با استفاده از همون آدرس عکس رو میخونی و نمایش میدی.

برای نمایش متن نیاز به یه TextView داری و برای نمایش عکس هم نیاز به ImageView. این چیزی که من میبینم شما هم به متن دسترسی داری هم به عکس. پس وقتی هر دو رو میتونی به دست بیاری فرقی نمیکنه دیگه باید بتونی از هر دوش استفاده کنی.

توی اکتیویتی اصلی هم میتونی یه ListView بذاری که در واقع باید بگم یه Custom ListView باید بذاری که توی هر ردیفش اسم داستان و عکس مربوط به اون رو بتونی نمایش بدی و کاربر روی هر کدوم که تاچ کرد شما توی کدنویسی که در پشت پرده انجام دادی مقادیر مربوط به داستان و تصویر رو به اون اکتیویتی میفرستی که قراره داستان و عکس رو به صورت کامل نمایش بده که اینکارم راحت با Intent و استفاده از متد putExtras قابل انجامه.

حالا اگه بخوای حرفه ای تر کار کنی میتونی یه کلاس بسازی که کلاس Parcelable رو پیاده سازی کنه و اطلاعات رو در قالب یک شی از اون کلاس با استفاده از Intent پاسکاری کنی که البته یکم سخته.

ali1393
جمعه 29 آبان 1394, 12:31 عصر
واقعیتش خودم هم چون چند روزه نمیفهمم مشکلم کجاست گیج شدم
عکسها تو ستون IMG فیلد Blob گذاشتم
برای گرفتن متن و عکس این کارو کردم:
private void load(String sea, String Name, int page3) {

db.open();


matn.setText(db.main_display("content", sea, Name, page3 + ""));


byte[] p = db.getpic(page3);
Bitmap bm = BitmapFactory.decodeByteArray(p, 0, p.length);
img.setImageBitmap(bm);


db.close();


}

ali1393
جمعه 29 آبان 1394, 12:46 عصر
تو این حالت در تمام داستانها فقط عکس داستان اول نشون داده میشه

msroid
جمعه 29 آبان 1394, 12:50 عصر
این کدی که الان نوشتی ارور داره...؟؟ مشکلش کجاست...؟؟

برای انجام اینکار حداقل به دوتا اکتیویتی نیاز داری. اولی برای اینکه لیست تمام داستان هارو نمایش بدی که کاربر بتونه انتخاب کنه و دومی برای نمایش جزئیات یعنی متن و عکس مربوط به اون.

این کدی که نوشتی باید در اکتیویتی دوم مورد استفاده قرار بگیره. یعنی در اکتیویتی دوم یه TextView و یه ImageView گذاشتی و این کد رو هم داخل متد onCreate بعد از اینکه اون دوتا View رو معرفی کردی باید صدا بزنی تا پرشون کنه.
البته همونجور که گفتم باید از اکتیویتی اول مقدارهای مورد نیاز مثل ID رو به اکتیویتی دوم بفرستی تا هر دفعه بر اساس اون ID اطلاعات رو از دیتابیس واکشی کنی.

ali1393
جمعه 29 آبان 1394, 12:57 عصر
این کدی که الان نوشتی ارور داره...؟؟ مشکلش کجاست...؟؟

برای انجام اینکار حداقل به دوتا اکتیویتی نیاز داری. اولی برای اینکه لیست تمام داستان هارو نمایش بدی که کاربر بتونه انتخاب کنه و دومی برای نمایش جزئیات یعنی متن و عکس مربوط به اون.

این کدی که نوشتی باید در اکتیویتی دوم مورد استفاده قرار بگیره. یعنی در اکتیویتی دوم یه TextView و یه ImageView گذاشتی و این کد رو هم داخل متد onCreate بعد از اینکه اون دوتا View رو معرفی کردی باید صدا بزنی تا پرشون کنه.
البته همونجور که گفتم باید از اکتیویتی اول مقدارهای مورد نیاز مثل ID رو به اکتیویتی دوم بفرستی تا هر دفعه بر اساس اون ID اطلاعات رو از دیتابیس واکشی کنی.
اروری نمیده فقط همونجوری که گفتم یک عکس تو بقیه داستانها تکرار میشه . فکر کنم تو اکتیویتی اول id و انتقال نمیدم دوباره چکش میکنم :ناراحت:

msroid
جمعه 29 آبان 1394, 13:17 عصر
اگه در دیتابیس در هر ردیف فقط یه داستان و یه عکس داری کلا سه تا فیلد نیاز داری. یکی برای ID یکی برای متن داستان و یکی هم برای تصویر.
خب داستان رو هم میذاریم story تصویر رو هم میذاریم image.
حالا اینجوری میتونیم بهشون دسترسی داشته باشیم:


public void loadData(string id){
String query = "SELECT * FROM tableName WHERE (id = " + id + ")";
Cursor c = db.rawQuery(query, null);
while( c.moveToNext){
textView.setText(c.getString(c.getColumnIndex("story")));
byte[] byteArray = c.getBlob(c.getColumnIndex("image")));
Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
imageView.setImageBitmap(bitmap);
}
}