java - Android在 fragment 中获取图像的文件路径

标签 java android android-fragments nullpointerexception

<分区>

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

我读了Get file path of image on Android ,但我遇到 NullPointerException 问题。

我的问题和上面的问题之间的主要区别在于我是在一个 fragment 中做的。

这是我的代码:

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

我得到与 Uri imgUri 一致的 NullPointerException。

@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: Failure delivering result ResultInfo{who=android:fragment:1, request=22222, result=-1, data=Intent { act=inline-data (has extras) }} to activity {.MainActivity}: java.lang.NullPointerException: uriString

如有任何帮助,我将不胜感激。

整个错误日志:

09-14 12:06:18.448 16497-16497/com.example.radzik.recipes E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.radzik.recipes, PID: 16497 java.lang.RuntimeException: Failure delivering result ResultInfo{who=android:fragment:1, request=22222, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.example.radzik.recipes/com.example.radzik.recipes.activity.MainActivity}: java.lang.NullPointerException: uriString at android.app.ActivityThread.deliverResults(ActivityThread.java:3699) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) at android.app.ActivityThread.-wrap16(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) 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: uriString at android.net.Uri$StringUri.(Uri.java:475) at android.net.Uri$StringUri.(Uri.java) at android.net.Uri.parse(Uri.java:437) at com.example.radzik.recipes.fragment.ChoosePhotoFragment.getImageUri(ChoosePhotoFragment.java:144) at com.example.radzik.recipes.fragment.ChoosePhotoFragment.onActivityResult(ChoosePhotoFragment.java:135) at android.app.Activity.dispatchActivityResult(Activity.java:6452) at android.app.ActivityThread.deliverResults(ActivityThread.java:3695) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)  at android.app.ActivityThread.-wrap16(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5417)  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) 

最佳答案

您的问题出在 getActivity() 上,因为您正在获取当前 Activity 的 Intent ,但该 Activity 将失败。 因此,如果您将代码移动到 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" />

关于java - Android在 fragment 中获取图像的文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46216295/

相关文章:

JAVA - 从网络服务器下载二进制文件(例如 PDF)文件

java - 如何调试第三方Gradle插件?

安卓 Facebook 登录 "LoginActivity could not be started"

android - 如何使用多个 NavHost fragment 创建深层链接

java - Zip4j 没有错误,尽管应该出现错误,但提取全部失败

java - 创建循环来检查数组 (java)

java - 使用输入字符串生成对象和函数反射

android - 如何在android中创建指纹授权?

android - 更改方向调用 onpageselected 在 oncreateview 之前

android - 从 Fragment 访问 EditTextPreference 的文本