ذخیره عکس در دیتابیس Sqlite در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ذخیره عکس در دیتابیس Sqlite در برنامه نویسی اندروید می پرازیم همانطور که می دانید فقط و فقط در دیتابیس sqlite متن یا همان Text ذخیره می شود در ادامه توضیح خواهیم داد که چگونه عکس را به Text تبدیل کنید در ادامه می توانید پیش نمایشی از آن را مشاهده کنید با ما همراه باشید.
این آموزش شامل قرار دادن عکس و خواندن آن از دیتابیس است.
در ابتدای کار باید دسترسی های زیر را به AndroidManifest.xml اضافه کنید.
1 2 | <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> |
بعد از آن وارد layout خود شده در اینجا نام آن برابر با activity_main.xml است و کد زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:text="@string/get_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="19dp" android:id="@+id/button" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:onClick="save"/> <Button android:text="@string/view_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="29dp" android:id="@+id/button2" android:layout_below="@+id/button" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:onClick="get"/> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" app:srcCompat="@mipmap/ic_launcher" android:id="@+id/imageView" android:layout_below="@+id/button2" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="43dp" tools:ignore="ContentDescription" /> </RelativeLayout> |
دو دکمه در بالا یکی برای ذخیره در دیتابیس و یکی برای دریافت از دیتابیس قرار گرفته است و یک ImageView برای قرار دادن عکس.
و در آخر کد مربوط به MainActivity.java همانند زیر می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package ir.programchi; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.Toast; import java.io.FileInputStream; import java.io.IOException; public class MainActivity extends AppCompatActivity { ImageView imageView; SQLiteDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.imageView); //database created db = this.openOrCreateDatabase("test.db", Context.MODE_PRIVATE,null); //table created db.execSQL("create table if not exists imageTb ( a blob )"); } public void save(View view) throws IOException { FileInputStream fis = new FileInputStream("/storage/sdcard/demoImage.jpg"); byte[] image= new byte[fis.available()]; fis.read(image); ContentValues values = new ContentValues(); values.put("a",image); db.insert("imageTb", null,values); fis.close(); Toast.makeText(this,"Done", Toast.LENGTH_SHORT).show(); } public void get(View view) { Cursor c = db.rawQuery("select * from imageTb", null); if(c.moveToNext()) { byte[] image = c.getBlob(0); Bitmap bmp= BitmapFactory.decodeByteArray(image, 0 , image.length); imageView.setImageBitmap(bmp); Toast.makeText(this,"Done", Toast.LENGTH_SHORT).show(); } } } |
ابتدا عکس به byte تبدیل می شود تا به متن قابل ذخیره دربیاید سپس در دیتابیس insert می شود .
این آموزش هم به پایان رسید.
موفق و موید باشید.
سلام
برنامه ایی که می خوام درست کنم متن و عکس زیادی داره
حالا اگه دیتا ها رو هم میشه مستقیم وارد کنم که راحت تره
هم از دیتا بیس استفاده کنم که سخته تره
استفاده از دیتا بیس کاهش تاثیری تو حجم برنامه داره ؟
یکی مگه داره یکی می گه نداره !!!!!