将图片添加到Android SQLite数据库 [英] Adding image to android SQLite Database

查看:132
本文介绍了将图片添加到Android SQLite数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尽了最大努力解决这个问题,但不能看着办吧。

我有微调用图片和文字,连接到SQLite数据库。基本上,当我点击保存按钮,我想选择的微调图像保存在数据库中。但它没有发生预期。

下面是code。任何帮助是AP preciated。

MainActivity code:

 公共无效saveTask(){
    如果(我== 0){
        位图IM = BitmapFactory.de codeResource(getResources(),R.drawable.red);
        ByteArrayOutputStream流=新ByteArrayOutputStream();
        im.com preSS(Bitmap.Com pressFormat.PNG,100,流);
        byte []的imageinByte = stream.toByteArray();
        长ID = mDbHelper.addImage(imageinByte);
        如果(标识大于0){
            mRowId = ID;
        }
    }

}
 

DATABASE code:

 私有静态最后弦乐DATABASE_NAME =Spinnner;
私有静态最后弦乐DATABASE_TABLE =旋转;
私有静态最终诠释DATABASE_VERSION = 1;

公共静态最后弦乐KEY_ROWID =_id;
公共静态最后弦乐KEY_IMAGE =形象;

私有静态最后字符串变量=SPINNERERROR;

私人DatabaseHelper mDbHelper;
私人SQLiteDatabase MDB;

私有静态最后弦乐DATABASE_CREATE =
        CREATE TABLE IF NOT EXISTS+ DATABASE_TABLE +(
        + KEY_ROWID +整数主键自动增量,
        + KEY_IMAGE +BLOB);;

私人最终语境mCtx;
私有静态类DatabaseHelper扩展SQLiteOpenHelper {
    DatabaseHelper(上下文的背景下){
        超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
    }
    公共无效的onCreate(SQLiteDatabase DB){
        db.execSQL(DATABASE_CREATE);
    }
    @覆盖
    公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
        // TODO自动生成方法存根
        Log.w(TAG,从版本升级数据库+ oldVersion +到
                +动态网页+,这将销毁所有旧数据);
        db.execSQL(DROP TABLE IF EXISTS+ DATABASE_TABLE);
        的onCreate(DB);
    }
}
公共数据库(上下文CTX){
    this.mCtx = CTX;
}
公共数据库的open()抛出的SQLException {
    mDbHelper =新DatabaseHelper(mCtx);
    MDB = mDbHelper.getWritableDatabase();
    回到这一点;
}
公共无效的close(){
    mDbHelper.close();
}
众长addImage(byte []的图像){
    ContentValues​​ CV =新ContentValues​​();
    cv.put(KEY_IMAGE,图像);
    返回mDb.insert(DATABASE_TABLE,空,CV);
}
 

登录猫:

  09-14 00:28:29.228:E / AndroidRuntime(30838):致命异常:主要
09-14 00:28:29.228:E / AndroidRuntime(30838):显示java.lang.NullPointerException
09-14 00:28:29.228:E / AndroidRuntime(30838):在com.example.spinnerimage.Database.addImage(Database.java:62)
09-14 00:28:29.228:E / AndroidRuntime(30838):在com.example.spinnerimage.MainActivity.saveTask(MainActivity.java:114)
09-14 00:28:29.228:E / AndroidRuntime(30838):在com.example.spinnerimage.MainActivity.onClick(MainActivity.java:102)
 

解决方案

从这种变化中:

 私人ContentValues​​ createContentValues​​(byte []的图像){
    ContentValues​​值=新ContentValues​​();
    values​​.put(KEY_IMAGE,图像);

    返回值;
}

众长addImage(byte []的图像){
ContentValues​​ CV = createContentValues​​(图像);
返回mDb.insert(DATABASE_TABLE,空,CV);
}
 

I tried my best to solve this problem, but can't figure it out.

I have spinner with image and text, which is connected to SQLite database. Basically when I click save button, I want selected spinner image to save in database. But it is not happening as expected.

Below is the code. Any help is appreciated.

MainActivity code:

public void saveTask(){
    if(i == 0){
        Bitmap im = BitmapFactory.decodeResource(getResources(), R.drawable.red);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        im.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] imageinByte = stream.toByteArray();
        long id = mDbHelper.addImage(imageinByte);
        if(id > 0){
            mRowId = id;
        }
    }

}

DATABASE CODE:

private static final String DATABASE_NAME = "Spinnner";
private static final String DATABASE_TABLE = "spin";
private static final int DATABASE_VERSION = 1;

public static final String KEY_ROWID = "_id";
public static final String KEY_IMAGE = "image";

private static final String TAG = "SPINNERERROR";

private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;

private static final String DATABASE_CREATE = 
        "CREATE TABLE IF NOT EXISTS " + DATABASE_TABLE + " ("
        + KEY_ROWID + " integer primary key autoincrement, "
        + KEY_IMAGE + " BLOB);";

private final Context mCtx;
private static class DatabaseHelper extends SQLiteOpenHelper{
    DatabaseHelper(Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    public void onCreate(SQLiteDatabase db){
        db.execSQL(DATABASE_CREATE);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        onCreate(db);
    }
}
public Database(Context ctx){
    this.mCtx = ctx;
}
public Database open() throws SQLException{
    mDbHelper = new DatabaseHelper(mCtx);
    mDb = mDbHelper.getWritableDatabase();
    return this;
}
public void close(){
    mDbHelper.close();
}
public long addImage(byte[] image){
    ContentValues cv = new ContentValues();
    cv.put(KEY_IMAGE, image);
    return mDb.insert(DATABASE_TABLE, null, cv);
}

Log cat:

09-14 00:28:29.228: E/AndroidRuntime(30838): FATAL EXCEPTION: main
09-14 00:28:29.228: E/AndroidRuntime(30838): java.lang.NullPointerException
09-14 00:28:29.228: E/AndroidRuntime(30838):    at        com.example.spinnerimage.Database.addImage(Database.java:62)
09-14 00:28:29.228: E/AndroidRuntime(30838):    at   com.example.spinnerimage.MainActivity.saveTask(MainActivity.java:114)
09-14 00:28:29.228: E/AndroidRuntime(30838):    at com.example.spinnerimage.MainActivity.onClick(MainActivity.java:102)

解决方案

change from this:

private ContentValues createContentValues(byte[] Image) {
    ContentValues values = new ContentValues();
    values.put(KEY_IMAGE, Image);

    return values;
}

public long addImage(byte[] image){
ContentValues cv = createContentValues(image);
return mDb.insert(DATABASE_TABLE, null, cv);
}

这篇关于将图片添加到Android SQLite数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆