Member 12666830 Ответов: 0

Как мне избежать этого nullpointer в моем ArrayList & lt;uri>


Я пытаюсь взять / выбрать четыре фотографии подряд и добавить их каждую в ArrayList, чтобы иметь возможность показывать по одной за раз в ImageView. Однако, как только я делаю самый последний снимок, я получаю следующее исключение:

FATAL EXCEPTION: main
    Process: my.package.myapplication, PID: 11009
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {my.package.myapplication/my.package.myapplication.Person1Screen}: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.util.ArrayList.add(int, java.lang.Object)' on a null object reference
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3759)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3802)
    at android.app.ActivityThread.access$1400(ActivityThread.java:157)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1400)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5477)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
     
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.util.ArrayList.add(int, java.lang.Object)' on a null object reference
    at my.package.myapplication.Person1Screen.onActivityResult(Person1Screen.java:210)
    at android.app.Activity.dispatchActivityResult(Activity.java:6650)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3755)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3802) 
    at android.app.ActivityThread.access$1400(ActivityThread.java:157) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1400) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5477) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Последняя строка моего OnActivityResult-это место, где происходит ошибка:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == REQUEST_TAKE_PHOTO) {
                final boolean isCamera;
                if (data == null) {
                    isCamera = true;
                } else {
                    final String action = data.getAction();
                    if (action == null) {
                        isCamera = false;
                    } else {
                        isCamera = action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    }
                }
                Uri selectedImageUri;
                if (isCamera) {
                    selectedImageUri = outputFileUri;
                } else {
                    selectedImageUri = data == null ? null : data.getData();
                }
               // mainView.setImageURI(selectedImageUri);
                happyList.add(pictureCounter, selectedImageUri);
            }
        }
    }


и мой takePhotoIntent это:

private void dispatchTakePictureIntent() {
    pictureCounter = 0;
    happyList = new ArrayList<>();
    for(int i = 0; i < 4; i++) {
        pictureCounter++;
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            // Create the File where the photo should go
            File photoFile = null;
            try {
                photoFile = createImageFile();
                outputFileUri = Uri.fromFile(photoFile);
            } catch (IOException ex) {
                // Error occurred while creating the File
            }
            // Camera.
            final List<Intent> cameraIntents = new ArrayList<Intent>();
            final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            final PackageManager packageManager = getPackageManager();
            final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
            for (ResolveInfo res : listCam) {
                final String packageName = res.activityInfo.packageName;
                final Intent intent = new Intent(captureIntent);
                intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
                intent.setPackage(packageName);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                cameraIntents.add(intent);
            }
            // Filesystem.
            final Intent galleryIntent = new Intent();
            galleryIntent.setType("image/*");
            galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
            // Chooser of filesystem options.
            final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");
            // Add the camera options.
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[cameraIntents.size()]));
            startActivityForResult(chooserIntent, REQUEST_TAKE_PHOTO);
        }
    }
}


Может ли кто-нибудь помочь мне понять, почему мой массив становится нулевым, как только я делаю свой четвертый снимок?

Что я уже пробовал:

Может ли это быть связано с уничтожением деятельности? Понятия не имею.

Richard MacCutchan

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

Seal2002

Вы пробовали с помощью size() of ArrayList увидеть результат ?

0 Ответов