从对话框片段上的图库中选择照片时光标上的空指针异常 [英] Nullpointerexcepiton on cursor while selecting photo from gallery on dialog fragment

查看:39
本文介绍了从对话框片段上的图库中选择照片时光标上的空指针异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过 DialogFragment 从图库中选择照片.但是我在初始化 cursor 时得到 nullpointerexception.任何想法为什么会出现此错误?

I'm trying to select photo from gallery through DialogFragment. But I'm getting nullpointerexception while initializing cursor. Any ideas why getting this error?

下面是我的代码:

    if (resultCode == Activity.RESULT_OK) {
        Uri selectedImage = imageReturnedIntent.getData();
        String[] filePathColumn = {MediaStore.Images.Media.DATA};
        // Nullpointerexcepiton on this line
        Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
        cursor.moveToFirst();
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);

        cursor.close();

    }

这是我的 logcat 错误:

Here is my logcat error :

    03-24 12:34:37.645: E/AndroidRuntime(21479): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=65538, result=-1, data=Intent { dat=content://media/external/images/media/3890 flg=0x1 }} to activity {com.example/com.example.MainActivity}: java.lang.NullPointerException

    03-24 12:34:37.645: E/AndroidRuntime(21479):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3462)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3505)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at android.app.ActivityThread.access$1100(ActivityThread.java:150)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at android.os.Handler.dispatchMessage(Handler.java:99)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at android.os.Looper.loop(Looper.java:213)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at android.app.ActivityThread.main(ActivityThread.java:5225)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at java.lang.reflect.Method.invokeNative(Native Method)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at java.lang.reflect.Method.invoke(Method.java:525)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at dalvik.system.NativeStart.main(Native Method)

    03-24 12:34:37.645: E/AndroidRuntime(21479): Caused by: java.lang.NullPointerException
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at com.example.MainDialogFragment.onActivityResult(MainDialogFragment.java:226)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at com.example.MainActivity.onActivityResult(DelictActivity.java:85)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at android.app.Activity.dispatchActivityResult(Activity.java:5322)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3458)
    03-24 12:34:37.645: E/AndroidRuntime(21479):    ... 11 more

推荐答案

你如何开始你的 Activity,从哪里开始?如果您通过 MainActivity 传递结果,则可以尝试在 DialogFragment 中创建一个新函数,如下所示:

How do you start your Activity and from where? If you pass your result trough your MainActivity, you can try to make a new function in your DialogFragment like this:

public void onMyActivityResult(Context main, int resultCode... an so on){

     main.getContentResolver.......

}

我是这样做的:

在 onCreate 中获取活动:

Get the Activity in onCreate:

@Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mActivity = (MainActivity) this.getActivity();
    }

然后:

     @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
       if (requestCode == REQUEST_GALLERY && resultCode == Activity.RESULT_OK) {
           ...

            Uri selectedImage = data.getData();
            String path = getRealPathFromURI(selectedImage);
           ...
            reloadImages();

        }
        super.onActivityResult(requestCode, resultCode, data);
        }

和:

 private String getRealPathFromURI(Uri contentURI) {
    Cursor cursor = mActivity.getContentResolver().query(contentURI, null, null, null, null);
    if (cursor == null) { // Source is Dropbox or other similar local file
                  // path
        return contentURI.getPath();
    } else {
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        String path = cursor.getString(idx);
        cursor.close();
        return path;
    }
    }

这篇关于从对话框片段上的图库中选择照片时光标上的空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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