Как мне избежать этого 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 увидеть результат ?