【问题标题】:Android app dev: trying to save an image to store into SQLiteAndroid 应用开发:尝试将图像保存到 SQLite 中
【发布时间】:2019-03-23 17:10:26
【问题描述】:

我正在为班级创建一个 Android 应用程序,如果您单击我的用户界面上的“捕获”按钮,它将带您进入相机应用程序。然后它会将您返回到应用程序并显示图像缩略图,如果您单击“保存”按钮,它将将该按钮保存在我尚未创建的 SQLite 数据库中。

我的问题是试图弄清楚如何访问实际图片及其数据,而不是有关缩略图的信息。

我正在阅读的教程包含将图像存储在 Android 内置目录中的信息,但我不知道如何访问实际的全尺寸图像数据以存储到我将自己创建的数据库中。

这是教程的链接: https://developer.android.com/training/camera/photobasics#java

这不是完整的代码,只是一个片段,它是在 Android Studio 中创建的:

'''
图像视图图片;

public void capture(View view) {
    dispatchTakePictureIntent();
}

public void save(View view) {
}

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        pic.setImageBitmap(imageBitmap); // sets the imageview on the UI as the thumbnail
    }
}

'''

【问题讨论】:

  • 在数据库中存储照片在 Android 应用程序开发中并不是一个好的模式。将照片保存到文件中(可能在internal storage 中),并在数据库中保存照片的路径。
  • 我的任务是将它们存储在我必须创建的 SQLite 数据库中。
  • 感谢您提供的信息。

标签: java android image sqlite


【解决方案1】:

我认为您需要通过 takePictureIntent 意图使用

传递存储位置(文件)的 URI
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, your_image_Uri);

然后您可以打开文件并将其检索到 byte[] 中并将其存储为 blob。 SQLiteDatase 的便利性,insert method 使这变得非常容易。

例如假设 byte[] 是名称 my_picture 那么

ContentValues cv = new ContentValues();
cv.put(column_name_for_picture,my_picture);
long id = insert("the_table_name",null,cv);

您使用 SQLiteDatabase query method 从数据库中检索存储的图片,然后使用 Cursor 的 getBlob 方法提取字节[]。

然而

如果图片为 2MB 或更大,您将无法检索它,因为 CursorWindow 有 2MB 的限制(旧版本的 Android 为 1MB)。我建议即使是 1MB,您在检索图像时也可能会遇到问题。

推荐的方式是不将图片存入数据库,而是将图片存放在数据库中的文件的路径存入数据库。

您可能希望查看How to use images in Android SQLite that are larger than the limitations of a CursorWindow?,因为这显示了一种解决方法尽管不推荐

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 2012-12-16
    • 2015-01-05
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多