Разработчик приложения для Android: пытается сохранить изображение для сохранения в SQLite - PullRequest
0 голосов
/ 23 марта 2019

Я создаю приложение Android для класса, которое приведет вас к приложению камеры, если вы нажмете кнопку «захват» в моем пользовательском интерфейсе. Затем он возвращает вас в приложение и отображает миниатюру изображений, а если вы нажмете кнопку «Сохранить», он сохранит кнопку в базе данных SQLite, которую я еще не создал.

Моя проблема заключается в попытке выяснить, как получить доступ к фактическому изображению и его данным, а не к информации о миниатюре.

Урок, который я читал, содержит информацию для хранения изображения во встроенных в Android каталогах Android, но я не могу понять, как получить доступ к фактическим данным полноразмерного изображения для хранения в базе данных, которую я буду создавать сам.

Это ссылка на учебник: https://developer.android.com/training/camera/photobasics#java

Это не полный код, а всего лишь фрагмент кода, и он был создан в Android Studio:

'' '
ImageView pic;

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
    }
}

'' '

1 Ответ

1 голос
/ 23 марта 2019

Я считаю, что вам нужно передать URI места хранения (файла) через намерение takePictureIntent , используя

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, your_image_Uri);

Затем вы можете открыть файл и извлечь его в байт [] и сохранить его в виде большого двоичного объекта. Удобство SQLiteDatase, insert метод делает это очень простым.

например. при условии, что байт [] имеет имя my_picture, тогда

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

Вы извлекаете сохраненную картинку из базы данных, используя базу данных SQLiteDatabase , запрос , метод , а затем извлекаете байт [], используя метод getBlob курсора.

Тем не менее

Если размер изображения составляет 2 МБ или больше, , вы не сможете его получить , поскольку для CursorWindow существует ограничение в 2 МБ (1 МБ для более старых версий Android). Я бы предположил, что даже на 1 МБ у вас могут возникнуть проблемы с получением изображений.

Рекомендуется не хранить изображение в базе данных, а сохранять путь к файлу, в котором изображение хранится в базе данных.

Возможно, вы захотите взглянуть на Как использовать изображения в Android SQLite, размер которых превышает ограничения CursorWindow? , так как это показывает обходной путь , хотя НЕ рекомендуется .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...