如何在我的arraylist< uri>中避免这个nullpointer? [英] How do I avoid this nullpointer in my arraylist<uri>

查看:53
本文介绍了如何在我的arraylist< uri>中避免这个nullpointer?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图连续拍摄/选择四张图片并将它们分别添加到ArrayList中,以便能够在ImageView中一次显示一张。然而,当我拍摄最后一张照片时,我得到以下异常:



致命异常:主
处理:我的。 package .myapplication,PID: 11009
java.lang.RuntimeException:传递结果失败ResultInfo {who = null,request = 1,result = - 1 ,data = null}到活动{my。 package .myapplication / my。 package .myapplication.Person1Screen}:java.lang.NullPointerException:尝试调用虚方法' void java.util.ArrayList.add(int,java.lang.Object)'在空对象上引用
在android.app上。 ActivityThread.deliverResults(ActivityThread.java: 3759
在android.app.ActivityThread.handleSendResult(ActivityThread.java: 3802
在android.app.ActivityThread.access $ 1400(ActivityThread.java: 157
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:< span class =code-digit> 1400 )
在android.os.Handler.dispatchMessage(Handler.java: 102
在android.os.Looper.loop(Looper.java: 148
在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

引起:java.lang.NullPointerException:尝试调用虚方法' void java.util.ArrayList.add(int,java.lang.Object)' on null对象引用
at my。 package .myapplication.Person1Screen.onActivityResult(Person1Screen.java: 210
在android.app.Activity.dispatchActivityResult(Activity.java: 6650
在android.app.ActivityThread。 deliverResults(ActivityThread.java: 3755
在android.app.ActivityThread.handleSendResult(ActivityThread.java: 3802
在android.app.ActivityThread.access $ 1400(ActivityThread.java: 157
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java: 1400
在android.os.Handler.dispatchMessage(Handler.java: 102
在android.os.Looper.loop(Looper.java: 148
在android.app.ActivityThread 。主要(ActivityThread.java:<跨度class =code-digit> 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的最后一行是发生错误的地方:

  @覆盖 
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;
} 其他 {
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;
} 其他 {
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 ){
// 创建照片所在的文件
文件photoFile = ;
尝试 {
photoFile = createImageFile();
outputFileUri = Uri.fromFile(photoFile);
} catch (IOException ex){
// 创建文件时出错
}
// 相机。
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);
}
// 文件系统。
final Intent galleryIntent = < span class =code-keyword> new
Intent();
galleryIntent.setType( image / *);
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
// 文件系统选项的选择器。
final Intent chooserIntent = Intent.createChooser (galleryIntent, 选择来源);
// 添加相机选项。
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS ,cameraIntents.toArray( new Parcelable [cameraIntents.size()]));
startActivityForResult(chooserIntent,REQUEST_TAKE_PHOTO);
}
}
}





有人可以帮我理解为什么我的数组变为null我拍第四张照片的时候呢?



我尝试了什么:



这可能与被销毁的活动有关吗?我不知道。

解决方案

1400(ActivityThread.java: 157
在android .app.ActivityThread


H.handleMessage(ActivityThread.java: 1400
在android.os.Handler。 dispatchMessage(Handler.java: 102
在android.os.Looper.loop(Looper.java: 148
在android.app.ActivityThread.main(ActivityThread.java: 5477
at java.lang.reflect.Method .invoke(原生方法)
at com.android.internal.os.ZygoteInit


MethodAndArgsCaller.run(ZygoteInit.java: 726
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 616

引起:java.lang.NullPointerException:尝试调用虚方法' void java.util.ArrayList.add(int,java.lang.Object)'在空对象引用
at my。 package .myapplication.Person1Screen.onActivityResult(Person1Screen.java: 210
at android.app.Activity.dispatchActivityResult( Activity.java: 6650
在android.app.ActivityThread.deliverResults(ActivityThread.java: 3755
在android.app.ActivityThread.handleSendResult(ActivityThread.java: 3802
在android.app.ActivityThread.access

I am trying to take/pick four pictures in a row and add them each to an ArrayList in order to be able to show one at a time in an ImageView. Once I take the very last picture however, I get the following exception:

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)


The last line of my OnActivityResult is where the error occurs:

@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);
            }
        }
    }



and my takePhotoIntent is:

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



Can anybody please help me understand why my array becomes null as soon as I take my fourth picture?

What I have tried:

Could it have to do with the activity being destroyed? I have no clue.

解决方案

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


这篇关于如何在我的arraylist&lt; uri&gt;中避免这个nullpointer?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆