如何在我的arraylist< uri>中避免这个nullpointer? [英] How do I avoid this nullpointer in my arraylist<uri>
问题描述
我试图连续拍摄/选择四张图片并将它们分别添加到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< uri>中避免这个nullpointer?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!