将图库中的图像插入数据库
insert image from gallery to database
我想浏览图库中的图片并将其保存在 sqlite 数据库中
插入图片时出现以下错误
java.lang.NullPointerException
at com.example.imgapp.DBAdapter.insert(DBAdapter.java:91)
at com.example.imgapp.MainActivity.insert_img(MainActivity.java:76)
代码:
public class DBAdapter {
Context context;
DBHelper DBH;
SQLiteDatabase db;
DBAdapter(Context cx)
{
this.context = cx;
DBH = new DBHelper(context);
}
String DB_name="imagesDB";
int DB_version=1 ;
String table_name="images";
String column1="id";
String column2="title";
String column3="image";
String create_table="Create TABLE"+ table_name +"("+column1+" INTEGER PRIMARY KEY," + column2 +"TEXT,"+column3 +"BLOB );";
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, DB_name, null, DB_version);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.v("database creation", "creating ...................");
db.execSQL(create_table);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i2) {
Log.v("upgrade database","upgrading.............");
db.execSQL("DROP Table IF EXISTS images");
onCreate(db);
}
}
public DBAdapter open() throws SQLException
{
DBH.getWritableDatabase();
return this;
}
public void close()
{
DBH.close();
}
public long insert(String title ,byte[] img )
{
ContentValues cv=new ContentValues();
cv.put("title",title);
cv.put("image",img);
return db.insert(table_name,null,cv);
}
}
public class MainActivity extends ActionBarActivity {
ImageView imgv;
DBAdapter dba= new DBAdapter(this);
EditText titleTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgv=(ImageView)findViewById(R.id.imageView1);
titleTxt=(EditText)findViewById(R.id.editText);
}
public void Browse(View v)
{
Intent gallery =
new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(gallery, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 1) {
Uri imageUri = data.getData();
imgv.setImageURI(imageUri);
}
}
public void insert_img(View v) throws SQLException {
//insert to db
Bitmap b = ((BitmapDrawable)imgv.getDrawable()).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bt=stream.toByteArray();
dba.open();
dba.insert(titleTxt.getText().toString(), bt);
Log.v("image", "insert...........");
dba.close();
}
}
从图像视图插入图像时出现问题
有什么问题吗?有什么帮助吗?
提前致谢....
您需要从 getWritableDatabase
函数中获取 return 值并使用它来调用 insert
。现在,您正在使用 db
变量而没有对其进行初始化,并且您忽略了 getWritableDatabase
.
的结果
我想浏览图库中的图片并将其保存在 sqlite 数据库中
插入图片时出现以下错误
java.lang.NullPointerException
at com.example.imgapp.DBAdapter.insert(DBAdapter.java:91)
at com.example.imgapp.MainActivity.insert_img(MainActivity.java:76)
代码:
public class DBAdapter {
Context context;
DBHelper DBH;
SQLiteDatabase db;
DBAdapter(Context cx)
{
this.context = cx;
DBH = new DBHelper(context);
}
String DB_name="imagesDB";
int DB_version=1 ;
String table_name="images";
String column1="id";
String column2="title";
String column3="image";
String create_table="Create TABLE"+ table_name +"("+column1+" INTEGER PRIMARY KEY," + column2 +"TEXT,"+column3 +"BLOB );";
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, DB_name, null, DB_version);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.v("database creation", "creating ...................");
db.execSQL(create_table);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i2) {
Log.v("upgrade database","upgrading.............");
db.execSQL("DROP Table IF EXISTS images");
onCreate(db);
}
}
public DBAdapter open() throws SQLException
{
DBH.getWritableDatabase();
return this;
}
public void close()
{
DBH.close();
}
public long insert(String title ,byte[] img )
{
ContentValues cv=new ContentValues();
cv.put("title",title);
cv.put("image",img);
return db.insert(table_name,null,cv);
}
}
public class MainActivity extends ActionBarActivity {
ImageView imgv;
DBAdapter dba= new DBAdapter(this);
EditText titleTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgv=(ImageView)findViewById(R.id.imageView1);
titleTxt=(EditText)findViewById(R.id.editText);
}
public void Browse(View v)
{
Intent gallery =
new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(gallery, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 1) {
Uri imageUri = data.getData();
imgv.setImageURI(imageUri);
}
}
public void insert_img(View v) throws SQLException {
//insert to db
Bitmap b = ((BitmapDrawable)imgv.getDrawable()).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bt=stream.toByteArray();
dba.open();
dba.insert(titleTxt.getText().toString(), bt);
Log.v("image", "insert...........");
dba.close();
}
}
从图像视图插入图像时出现问题 有什么问题吗?有什么帮助吗? 提前致谢....
您需要从 getWritableDatabase
函数中获取 return 值并使用它来调用 insert
。现在,您正在使用 db
变量而没有对其进行初始化,并且您忽略了 getWritableDatabase
.