قرار دادن عکس در دیتا بیس
با سلام یه سوال دارم ایا عکسهارو تو دیتابیس قرار بدیم کار منطقی هست یا نه بهترین راه چیه ممنون اگه اموزش اون رو بگید
سلام تصویر رو میشه به صورت آرایه داخل دیتابیس ذخیره کرد.ولی خب چه کاریه آخه
دقیقا همین سئوال تو یکی از مصاحبه هایی که تا حالا داشتم ازم پرسیدن؟
طرف خیلی جدی بهم گفت تصاویر رو تو دیتابیس ذخیره کنیم بهتره منم یکم بهش نگاه کردم گفتم مگه داریم چنین چیزی اونم گیر داده بود که داریم من گفتم اصلا نوع داده ای تصویر تو دیتابیس نیست که یهو یادم افتاد تو دوران دانشجویی یه مقاله خونده بودم که تصویر یک آرایه از پیکسل هاست ولی کاری کاملا احمقانه است که بخوای تصاویر رو توی دیتابیس ذخیره کنی.
تصویر را میشه به صورت Blob در دیتابیس ذخیره کرد فقط کافیه در دیتابیس یک Blob تعریف کرد و عکس را بهش Attach کرد. و به صورت زیر هم میشه عکس ذخیره شده در دیتا بیس را فراخوانی کرد.
byte[] pictureBmp = cursor.getBlob(cursor.getColumnIndex("Picture_Table"));
Bitmap bmp = BitmapFactory.decodeByteArray(pictureBmp, 0, pictureBmp.length);
image.setImageBitmap(bmp);
cursor.close();
امیدوارم که منظور شما را درست فهمیده باشم. اگر میخواهید آدرس فقط چند تا تصویر را داشته باشید اصلا پیشنهاد خوبی نیست که از دیتابیس برای اینکار استفاده کنید. اما من راه استفاده از دیتابیس را هم میگم. روش اول استفاده از کلاس سراسری یا همون G هست. شما میتونید آدرس تصاویر را در یک آرایه از نوع int قرار بدید و هر جا که خواستید فراخوانی کنید.
public class G extends Application {
public static final int[] ITEM_DRAWABLES = { R.drawable.facebook,
R.drawable.twitter, R.drawable.flickr, R.drawable.instagram,
R.drawable.skype, R.drawable.github };
.
.
}
public class ActivityMain extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView img = (ImageView) findViewById(R.id.img1);
img.setImageResource(G.ITEM_DRAWABLES[0]);
}
}
در روش دوم آدرس را به صورت رشته اون هم به صورت زیر در دیتابیس قرار میدیم.
String imageUri = "@drawable/myimage1"; // myimage.png تصویر مورد نظر شما خواهد بود
@drawable/myimage2
@drawable/myimage3
| ImageUri | rowId |
| drawavle/myimage1@ | 1 |
| drawavle/myimage2@ | 2 |
| drawavle/myimage3@ | 3 |
این رشته را برای تمامی عکسها به همین نحو در جدول آدرس تصاویر در دیتابیس قرار میدیم وبرای فراخوانیش هم به صوررت زیر از دیتابیس میخونیم و تصویر را بر روی imageview لود میکنیم.
int row = 1; // اشاره به سطر ی از جدول دارد
String table = "نام جدول تصاویر";
Cursor cursor = myDatabase.rawQuery("select * from " + table
+ " where rowId=" + row, null);
cursor.moveToFirst();
String imageUri = cursor.getString(cursor.getColumnIndex("ستون آدرس تصاویر"));
int imageResource = getResources().getIdentifier(imageUri, null, getPackageName());
imageview= (ImageView)findViewById(R.id.imageView);
Drawable drawable = getResources().getDrawable(imageResource);
imageView.setImageDrawable(drawable);
سلام مهندس این کد ها رو کجا بزارم String imageUri ="@drawable/myimage1" تصویر مورد نظر شما خواهد بود و کد زیر رو کجا بزارم تو کلاس دیتابیس یا جای دیگه ؟و منظور شما از myDatabas اینه همون اسم دیتابس هست که من mydb گرفتم تو کلاس دیتابیس؟
int row =1;// اشاره به سطر ی از جدول داردString table ="نام جدول تصاویر";Cursor cursor = myDatabase.rawQuery("select * from "+ table +" where rowId="+ row,null); cursor.moveToFirst();String imageUri = cursor.getString(cursor.getColumnIndex("ستون آدرس تصاویر"));int imageResource = getResources().getIdentifier(imageUri,null, getPackageName()); imageview=(ImageView)findViewById(R.id.imageView);Drawable drawable = getResources().getDrawable(imageResource); imageView.setImageDrawable(drawable);
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .