首页 文章

从图库中选择图像并在ImageView中显示?

提问于
浏览
-2

我正在开发一个应用程序,要求用户从库中选择一张照片并将其设置为 Profiles 图片 . 现在,以下代码在大多数设备上都能正常工作(我已经检查了摩托罗拉Moto G,One plus X,MI 4i和其他一些设备) . 每当我在redmi prime上运行它时,它会给出一个错误,如下所示:

堆栈跟踪

进程:com.example.lordvoldemort.imagepicker,PID:23291 java.lang.RuntimeException:传递结果失败ResultInfo {who = null,request = 1,result = -1,data = Intent {dat = file:/// storage /emulated/0/DCIM/Camera/IMG_20160807_003845_HDR.jpg typ = image / jpeg}} to activity {com.example.lordvoldemort.imagepicker / com.example.lordvoldemort.imagepicker.MainActivity}:java.lang.NullPointerException:尝试调用在android.app.ActivityThread.handleSendResult(ActivityThread.java:3638)的android.app.ActivityThread.deliverResults(ActivityThread.java:3595)上的空对象引用上的接口方法'boolean android.database.Cursor.moveToFirst()'at android.app.ActivityThread.access $ 1300(ActivityThread.java:154)在Android.app.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1366) . os.Looper.loop(Looper.java:135)在android.app.ActivityThread.main(ActivityThread.java:5290)java.lang.reflect.Method.invoke(Native Method)在java.lang.reflect.Method.invoke(Method.java:372)的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:908)at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:703)引起:java.lang.NullPointerException:尝试在com.example.lordvoldemort.imagepicker.MainActivity.onActivityResult上的空对象引用上调用接口方法'boolean android.database.Cursor.moveToFirst()' (MainActivity.java:104)在Android.app.ActivityThread.deleverResult(ActivityThread.java:3591)的android.app.ActivityThread.handleSendResult(ActivityThread.java:)中的android.app.Activity.dispatchActivityResult(Activity.java:6241) 3638)在Android.app.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread.access $ 1300(ActivityThread.java:154)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1366)在android.os.Looper.loop(Looper.java:135)的android.app.ActivityThread.main(ActivityThread.java:5290)java.lang.reflect.Method.invoke(Native Me)在com.android.internal.os.ZygoteInit的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:908)的java.lang.reflect.Method.invoke(Method.java:372)上 . . 主要(ZygoteInit.java:703)

我在ActivityResult上使用的代码 -

Uri selectedImage = data.getData();
                    String[] filePathColumn = { MediaStore.Images.Media.DATA };

                    Cursor cursor = getContentResolver()
                            .query(selectedImage, filePathColumn, null,
                                    null, null);
                    assert cursor != null;
                    cursor.moveToFirst();

                    int columnIndex = cursor
                            .getColumnIndex(filePathColumn[0]);
                    String filePath = cursor.getString(columnIndex);
                    cursor.close();

                    newbitmap = BitmapFactory.decodeFile(filePath);
                    ImageView ivImage = (ImageView)findViewById(R.id.image);
                    ivImage.setImageBitmap(newbitmap);


 public String getPathFromURI(Uri contentUri) {
        String res = null;
        String[] proj = {MediaStore.Images.Media.DATA};
        Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
        if (cursor.moveToFirst()) {
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            res = cursor.getString(column_index);
        }
        cursor.close();
        return res;
    }

错误是 - 尝试在空对象引用上调用接口方法'boolean android.database.Cursor.moveToFirst()'

1 回答

  • 0

    现在,以下代码在大多数设备上都能正常运行

    我怀疑它可以在很少的设备上可靠地工作 . 这将取决于 Uri 的来源 .

    错误是 - 尝试在空对象引用上调用接口方法'boolean android.database.Cursor.moveToFirst()'

    那是因为 MediaStore 无法识别 Uri . 您的 getPathFromURI() 将在少数设备上用于少量 Uri 值(但是,它又取决于 Uri 的来源) .

    A Uri is not a file . 对于 Uri 没有要求 Uri ,只需要在 stackoverflow.com Web服务器上的路径 /questions/39355114/select-image-from-gallery-and-show-in-an-imageview (这是此问题的URL的路径部分)上有一个文件 .

相关问题