Java Android获取图像的文件路径,其中包含一个片段

Java Android获取图像的文件路径,其中包含一个片段,java,android,android-fragments,nullpointerexception,Java,Android,Android Fragments,Nullpointerexception,我有一个应用程序,我需要拍照,然后上传到firebase。我基本上需要照片的Uri路径 我读过,但我对NullPointerException有问题 我的问题和上面的问题之间的主要区别在于,我是在一个片段中完成的 这是我的密码: mTakePhotoButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { In

我有一个应用程序,我需要拍照,然后上传到firebase。我基本上需要照片的Uri路径

我读过,但我对NullPointerException有问题

我的问题和上面的问题之间的主要区别在于,我是在一个片段中完成的

这是我的密码:

mTakePhotoButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);
        }
    });
我得到的NullPointerException与Uri imgUri一致

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            mImgView.setImageBitmap(photo);
            Uri imgUri = getImageUri(getActivity().getApplicationContext(), photo);
            mManager.setPhotoUri(imgUri);
        }
}
这是我用来获取Uri的方法

private Uri getImageUri(Context inContext, Bitmap inImage) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
        return Uri.parse(path);
    }
确切的错误消息是:

java.lang.RuntimeException:传递结果失败 ResultInfo{who=android:fragment:1,request=22222,result=-1, data=Intent{act=inline data(具有额外功能)}}到活动 {.MainActivity}: java.lang.NullPointerException:uriString

我将感谢任何帮助

整个错误日志:

09-14 12:06:18.448 16497-16497/com.example.radzik.recipes E/AndroidRuntime:FATAL EXCEPTION:main 流程:com.example.radzik.recipes,PID:16497 java.lang.RuntimeException:向活动{com.example.radzik.recipes/com.example.radzik.recipes.activity.MainActivity}传递结果ResultInfo{who=android:fragment:1,request=22222,result=-1,data=Intent{act=inline data(has extra)}}失败 位于android.app.ActivityThread.deliverResults(ActivityThread.java:3699) 位于android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 位于android.app.ActivityThread.-wrap16(ActivityThread.java) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:148) 位于android.app.ActivityThread.main(ActivityThread.java:5417) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 原因:java.lang.NullPointerException:uriString 在android.net.Uri$StringUri。(Uri.java:475) 在android.net.Uri$StringUri.(Uri.java) 位于android.net.Uri.parse(Uri.java:437) 在com.example.radzik.recipes.fragment.ChoosePhotoFragment.getImageUri(ChoosePhotoFragment.java:144) 在com.example.radzik.recipes.fragment.ChoosePhotoOfRagment.onActivityResult上(ChoosePhotoOfRagment.java:135) 位于android.app.Activity.dispatchActivityResult(Activity.java:6452) 位于android.app.ActivityThread.deliverResults(ActivityThread.java:3695) 位于android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 位于android.app.ActivityThread.-wrap16(ActivityThread.java) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:148) 位于android.app.ActivityThread.main(ActivityThread.java:5417) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)


您的问题在于
getActivity()
,因为您正在获取当前活动的意图,该活动将失败。 因此,如果您将代码移动到OnActivityResult上的
,这将使其正常工作

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //first call super
    super.onActivityResult(requestCode, resultCode, data);

    //rest of your code
}
别忘了加上

<uses-permission android:name="android.permission.CAMERA" />

和/或没有取决于您的应用程序

<uses-feature android:name="android.hardware.camera" />


你能发布包含堆栈框架的整个错误日志吗?我已经用完整错误更新了我的问题看起来
insertImage
调用返回
null
,因此
路径为
null
。好的,我去看看。非常感谢!在寻找中犯了错误