Android onActivityResult上的空指针

Android onActivityResult上的空指针,android,android-camera,android-camera-intent,Android,Android Camera,Android Camera Intent,使用相机,我有一个选项,用户可以拍照,也可以从他们的图库浏览照片。然后将图像加载到应用程序屏幕中。我目前遇到的问题是拍照选项 拍照选项在带有KitKat的设备上运行良好,但除此之外,它是一场灾难 代码如下: takePhoto.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stu

使用相机,我有一个选项,用户可以拍照,也可以从他们的图库浏览照片。然后将图像加载到应用程序屏幕中。我目前遇到的问题是拍照选项

拍照选项在带有KitKat的设备上运行良好,但除此之外,它是一场灾难

代码如下:

takePhoto.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
        // TODO Auto-generated method stub

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // file to save the image
        fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

        // set the image file name
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

        startActivityForResult(intent, TAKE_PICTURE);

    }
其中getOutputMediaFileUri函数类似于

onActivityResult()
方法上:

if (requestCode == TAKE_PICTURE) {
    if (resultCode == activity.RESULT_OK) {             
        String path = fileUri.getPath().toString(); 
        previewImage(path);
        try {
            getPictureDetails(path);
        } catch (FileNotFoundException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        }


    }
错误日志:

11-29 14:42:12.750: E/AndroidRuntime(18570): FATAL EXCEPTION: main
11-29 14:42:12.750: E/AndroidRuntime(18570): java.lang.RuntimeException: Unable to resume activity {com.developmentcheck.dcforpublic/com.developmentcheck.dcforpublic.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=262344, result=-1, data=null} to activity {com.developmentcheck.dcforpublic/com.developmentcheck.dcforpublic.MainActivity}: java.lang.NullPointerException
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2658)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2686)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2159)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3595)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.app.ActivityThread.access$800(ActivityThread.java:146)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1266)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.os.Looper.loop(Looper.java:137)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.app.ActivityThread.main(ActivityThread.java:4949)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at java.lang.reflect.Method.invokeNative(Native Method)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at java.lang.reflect.Method.invoke(Method.java:511)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1043)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at dalvik.system.NativeStart.main(Native Method)
11-29 14:42:12.750: E/AndroidRuntime(18570): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=262344, result=-1, data=null} to activity {com.developmentcheck.dcforpublic/com.developmentcheck.dcforpublic.MainActivity}: java.lang.NullPointerException
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3224)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2645)
11-29 14:42:12.750: E/AndroidRuntime(18570):    ... 13 more
11-29 14:42:12.750: E/AndroidRuntime(18570): Caused by: java.lang.NullPointerException
11-29 14:42:12.750: E/AndroidRuntime(18570):    at com.developmentcheck.dcforpublic.Fragment_comment.onActivityResult(Fragment_comment.java:358)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:166)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.app.Activity.dispatchActivityResult(Activity.java:5369)
11-29 14:42:12.750: E/AndroidRuntime(18570):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3220)
11-29 14:42:12.750: E/AndroidRuntime(18570):    ... 14 more
错误发生在以下行中:

String path = fileUri.getPath().toString(); 

在onActivityResult中,首先从返回的数据获取fileUri

     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TAKE_PICTURE) {
    if (resultCode == activity.RESULT_OK) {             
 fileUri =data.getExtras(MediaStore.EXTRA_OUTPUT);       
String path = fileUri.getPath().toString(); 
        previewImage(path);
        try {
            getPictureDetails(path);
        } catch (FileNotFoundException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

     }

将您的fileUri从

 fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);


您的错误出现在
11-29 14:42:12.750:E/AndroidRuntime(18570):com.developmentcheck.dcforpublic.Fragment\u comment.onActivityResult(Fragment\u comment.java:358)
。检查您的评论358@Vino是的,我知道。。。我指出了错误。
fileUri
在哪里声明?我猜,您的活动被重新启动,并且您失去了它的价值……我假设在某些设备中,这是由于方向问题造成的。活动重新启动的地方。您可以做的是将文件uri保存在
共享首选项中,直到您捕获图像。当从一个
活动切换到另一个
活动时,由于各种原因,如内存不足等,操作系统可以随意销毁上一个。当您启动另一个活动以获取结果时,您就处于这种情况。当您返回时,如果活动被破坏,您需要确保它得到正确的重建。因此,当您切换回此
活动时,显示
fileUri
是如何定义的,以及它是如何恢复的,这是相关的。
            String fileName = "temp.jpg";  
            ContentValues values = new ContentValues();  
            values.put(MediaStore.Images.Media.TITLE, fileName);  
            fileUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);