将图库中的图像插入数据库

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.

的结果