Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 向SQLite数据库表添加图像_Android_Sqlite_Android Sqlite - Fatal编程技术网

Android 向SQLite数据库表添加图像

Android 向SQLite数据库表添加图像,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我是安卓和Java的新手。向SQLite数据库表添加图像时遇到一些问题。以下是我的表格设计: private static final String CREATE_GALLERY_TABLE = "CREATE TABLE " + GALLERY_TABLE + "(" + ID + " INTEGER PRIMARY KEY," + IMAGE + " BLOB," + TITLE + " TEXT," + CAPTION + " TEXT" + ")"

我是安卓和Java的新手。向SQLite数据库表添加图像时遇到一些问题。以下是我的表格设计:

private static final String CREATE_GALLERY_TABLE = "CREATE TABLE "
    + GALLERY_TABLE + "("
    + ID + " INTEGER PRIMARY KEY,"
    + IMAGE + " BLOB,"
    + TITLE + " TEXT,"
    + CAPTION + " TEXT" + ")";
这是我将
图像
标题
标题
添加到
表中的方法:

public boolean createGallery(byte[] image, String title, String caption) throws SQLiteException {
 SQLiteDatabase db = this.getWritableDatabase();
 ContentValues values = new ContentValues();

 values.put(IMAGE, image);
 values.put(TITLE, title);
 values.put(CAPTION, caption);

 long result = db.insert(GALLERY_TABLE, null, values);

 if (result == -1)
  return false;
 else
  return true;
}
在我的活动中,我有以下方法:

//user selects image from gallery
public void selectImage() {
 selectButton.setOnClickListener(
  new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE);
   }
  }
 );
}

//This method is called when user selected image from gallery
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null) {
  Uri selectedImage = data.getData();
  viewImage.setImageURI(selectedImage);
 }
}
public void uploadImage() {
 uploadButton.setOnClickListener(
  new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    Bitmap image = ((BitmapDrawable) viewImage.getDrawable()).getBitmap();
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
    String encodedImage = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);

    boolean isInserted = myDb.createGallery(
     encodedImage.getBytes(),
     addTitle.getText().toString(),
     addCaption.getText().toString()
    );

    if (isInserted == true) {

     Toast.makeText(gallery.this, "Image uploaded successfully added", Toast.LENGTH_SHORT).show();
    } else
     Toast.makeText(gallery.this, "Image upload has failed", Toast.LENGTH_SHORT).show();

   }
  }
 );
}

我可以从图库中选择一幅图像,选中后,我有一个名为
viewImage
ImageView
,它成功地显示了我选择的图像。我还能够成功地插入到数据库中,插入了标题和标题,但图像列为空。知道我哪里出错了吗?如果有任何帮助,我们将不胜感激。

为什么要对字节数组进行base64编码,然后将该字符串转换回字节数组?难道你不想把压缩字节数组放到数据库中吗?它会更小更快。另外,在日志中检查它的大小,确保它是有意义的。@DougStevenson我在YouTube上看了一个guys教程,但他发送到了服务器而不是SQLite数据库,所以最终结果不同,所以我只是尝试将encodedImage添加到数据库中。如果我只想将压缩字节数组添加到db中,我的代码应该是什么样子?…对不起,我对android编程非常陌生。您的压缩图像字节位于byteArrayOutputStream.toByteArray()。@DougStevenson所以我只需删除
Base64.encodeToString
,Base64.DEFAULT
?因此它是
String encodedImage=byteArrayOutputStream.toByteArray()
删除执行Base64编码的整行,只存储图像压缩的结果。