import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; /** * Created by zhaoyanli on 2017/10/26. */ public class ImageDbActivity extends AppCompatActivity { public static final int ORDER_ADD_CONTACTS = 666; TextView textView ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView iv = (ImageView)findViewById(R.id.image); if(getDrawable().size() != 0) { iv.setImageDrawable(getDrawable().get(0)); } } private ArrayList<Drawable> getDrawable() { PictureDatabase pd = new PictureDatabase(this); SQLiteDatabase sd = pd.getWritableDatabase(); ArrayList<Drawable> drawables = new ArrayList<Drawable>(); //查询数据库 Cursor c = sd.query("picture", null, null, null, null, null, null); //遍历数据 if(c != null && c.getCount() != 0) { while(c.moveToNext()) { //获取数据 byte[] b = c.getBlob(c.getColumnIndexOrThrow(PictureDatabase.PictureColumns.PICTURE)); //将获取的数据转换成drawable Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length, null); BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap); Drawable drawable = bitmapDrawable; drawables.add(drawable); } } return drawables; } }
数据库class
import java.io.ByteArrayOutputStream; import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.provider.BaseColumns; import com.chuizi.R; public class PictureDatabase extends SQLiteOpenHelper { //数据库的字段 public static class PictureColumns implements BaseColumns { public static final String PICTURE = "picture"; } private Context mContext; //数据库名 private static final String DATABASE_NAME = "picture.db"; //数据库版本号 private static final int DATABASE_Version = 1; //表名 private static final String TABLE_NAME = "picture"; //创建数据库 public PictureDatabase (Context context) { super(context, DATABASE_NAME, null, DATABASE_Version); this.mContext = context; } //创建表并初始化表 @Override public void onCreate (SQLiteDatabase db) { String sql = "Create table " + TABLE_NAME + "(" + BaseColumns._ID + " integer primary key autoincrement," + PictureColumns.PICTURE + " blob not null);"; db.execSQL(sql); //初始化 initDataBase(db,mContext); } //将转换后的图片存入到数据库中 private void initDataBase (SQLiteDatabase db, Context context) { Drawable drawable = context.getResources().getDrawable(R.mipmap.detail_zing_userd); ContentValues cv = new ContentValues(); cv.put(PictureColumns.PICTURE, getPicture(drawable)); db.insert(TABLE_NAME, null, cv); } //将drawable转换成可以用来存储的byte[]类型 private byte[] getPicture(Drawable drawable) { if(drawable == null) { return null; } BitmapDrawable bd = (BitmapDrawable) drawable; Bitmap bitmap = bd.getBitmap(); ByteArrayOutputStream os = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, 100, os); return os.toByteArray(); } //更新数据库 @Override public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { String sql = " DROP TABLE IF EXISTS " + TABLE_NAME; db.execSQL(sql); onCreate(db); } }