将图片添加到Android SQLite数据库 [英] Adding image to android SQLite Database
本文介绍了将图片添加到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屋!
查看全文