Не удается сохранить растровое изображение в новую папку в Android - PullRequest
0 голосов
/ 07 июня 2019

Я нажимаю на изображение из галереи и пытаюсь сохранить его в новой папке, но я получаю сообщение об ошибке ниже, может кто-нибудь, пожалуйста, помогите.

    java.lang.NullPointerException: 
    Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference

Вызов функции saveImage:

@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 pickedImage = data.getData();

        String[] filePath = {MediaStore.Images.Media.DATA};
        Cursor cursor = getContentResolver().query(pickedImage, filePath, null, null, null);
        cursor.moveToFirst();
        String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0]));

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        bitmap = BitmapFactory.decodeFile(imagePath, options);

        cursor.close();
    }
    try {
        saveImage(bitmap);
    } catch (IOException e) {
        e.printStackTrace();
    }
    Toast.makeText(this, "Image Saved", Toast.LENGTH_SHORT).show();
    finish();
}

Код сохранения моего изображения:

    public void saveImage(Bitmap finalBitmap) throws IOException {

            String root = Environment.getExternalStorageDirectory().getAbsolutePath();
            File myDir = new File(root + "/saved_images");
            myDir.createNewFile();

            String imageName = String.format("%d.png", System.currentTimeMillis());
            File file = new File(myDir, imageName);
            if (file.exists()) file.delete();
            try {
                FileOutputStream out = new FileOutputStream(file);
                finalBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                out.flush();
                out.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
    }

Ошибка в этой строке, finalBitmap всегда равен нулю;

    finalBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

1 Ответ

0 голосов
/ 07 июня 2019

попробуйте сделать это: замените myDir.createNewFile(); на myDir.mkdirs();, затем добавьте эту строку: file.createNewFile(); после File file = new File(myDir, imageName);

и не забудьте добавить разрешение на запись во внешнее хранилище, перейдите на страницуandroid манифест и добавьте: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> затем включите разрешение в вашем приложении в настройках

...