java.lang.RuntimeException: ошибка доставки результата *** Причина: java.lang.NullPointerException: uri - PullRequest
0 голосов
/ 06 апреля 2019

Я посмотрел - и я не могу найти ничего другого, относящегося к URI, касающемуся этой проблемы.

Мое приложение позволяет пользователю выбрать изображение из галереи, затем приложение получает URI, преобразует его в растровое изображение, затем сжимает его в JPEG и сохраняет файл в cacheDir для дальнейшего использования. После выбора изображения приложение «перестает работать».

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

Выберите изображение из галереи:

public void selectImageFromGallery(){
    Intent chooserIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
    startActivityForResult(chooserIntent, 1);
}

Получить данные, получить URI в результате активности, отправить в net функцию:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == RESULT_OK && requestCode == IMAGE_PICK  || requestCode == VIDEO_PICK) {
        switch (requestCode) {
            case 1:
                Intent intent = getIntent();
                setResult(RESULT_OK, intent);
                Uri imageUri = intent.getData();
                try {
                    startSendImage(imageUri);
                } catch (IOException e) {
                    e.printStackTrace();
                    return;
                }


                //Toast.makeText(this, "Sending uri to startSendImage", Toast.LENGTH_SHORT).show();
                //uriData = data.getData();
                //startSendImage(uriData);

                break;

            case 2:


                break;
            default:
                break;
        }
    }
}

Подготовить изображение для последующего использования:

public void startSendImage (Uri imageUri) throws IOException {
    Toast.makeText(this, "Received. Copying image.", Toast.LENGTH_SHORT).show();
    //Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),imageUri);

//create a file to write bitmap data
    String filename = "temp.jpg";
    File f = new File(this.getCacheDir(), filename);
    f.createNewFile();

//Convert bitmap to byte array
    //Bitmap bitmap1 = bitmap;
    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),imageUri);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100 /*ignored for PNG*/, bos);
    byte[] bitmapdata = bos.toByteArray();

//write the bytes in file
    FileOutputStream fos = new FileOutputStream(f);
    fos.write(bitmapdata);
    fos.flush();
    fos.close();
    if (f.exists()){
        Toast.makeText(this, "File Exists", Toast.LENGTH_SHORT).show();
    }
}

Логкат:

2019-04-06 18:20:43.907 18116-18116/com.com.project E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.com.project, PID: 18116
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/images/media/1598 flg=0x1 (has extras) }} to activity {com.com.project/com.com.project.MainActivity}: java.lang.NullPointerException: uri
    at android.app.ActivityThread.deliverResults(ActivityThread.java:4491)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:4534)
    at android.app.ActivityThread.-wrap20(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1752)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
 Caused by: java.lang.NullPointerException: uri
    at com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:128)
    at android.content.ContentResolver.openInputStream(ContentResolver.java:956)
    at android.provider.MediaStore$Images$Media.getBitmap(MediaStore.java:952)
    at com.com.project.MainActivity.startSendImage(MainActivity.java:138)
    at com.com.project.MainActivity.onActivityResult(MainActivity.java:102)
    at android.app.Activity.dispatchActivityResult(Activity.java:7556)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:4487)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:4534) 
    at android.app.ActivityThread.-wrap20(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1752) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6944) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...