Android 从库中选择图像并在图像视图中显示?
我正在开发一个应用程序,它要求用户从图库中选择一张照片,并将其设置为个人资料图片。现在,下面的代码在我在摩托罗拉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}}到活动 {com.example.lordvoldemort.imagepicker/com.example.lordvoldemort.imagepicker.MainActivity}: java.lang.NullPointerException:尝试调用接口方法 空对象上的“boolean android.database.Cursor.moveToFirst” 参考 在android.app.ActivityThread.deliverResultsActivityThread.java:3595 在 android.app.ActivityThread.handleSendResultActivityThread.java:3638 在android.app.ActivityThread.access$1300ActivityThread.java:154 在 android.app.ActivityThread$H.handleMessageActivityThread.java:1366 位于android.os.Handler.dispatchMessageHandler.java:102 在android.os.Looper.Looper.java:135 在android.app.ActivityThread.mainActivityThread.java:5290 在java.lang.reflect.Method.Invokenactive方法中 位于java.lang.reflect.Method.invokeMethod.java:372 在 java:908 位于com.android.internal.os.ZygoteInit.mainZygoteInit.java:703 原因:java.lang.NullPointerException:尝试调用接口 方法“boolean android.database.Cursor.moveToFirst”位于空 对象引用 在 com.example.lordvoldemort.imagepicker.MainActivity.onActivityResultMainActivity.java:104 在android.app.Activity.dispatchActivityResultActivity.java:6241 在android.app.ActivityThread.deliverResultsActivityThread.java:3591 在 android.app.ActivityThread.handleSendResultActivityThread.java:3638 在android.app.ActivityThread.access$1300ActivityThread.java:154 在 android.app.ActivityThread$H.handleMessageActivityThread.java:1366 位于android.os.Handler.dispatchMessageHandler.java:102 在android.os.Looper.Looper.java:135 在android.app.ActivityThread.mainActivityThread.java:5290 在java.lang.reflect.Method.Invokenactive方法中 位于java.lang.reflect.Method.invokeMethod.java:372 在 java:908 访问com.android.internal.os.Zyg java:703 我在ActivityResult上使用的代码-Android 从库中选择图像并在图像视图中显示?,android,Android,我正在开发一个应用程序,它要求用户从图库中选择一张照片,并将其设置为个人资料图片。现在,下面的代码在我在摩托罗拉Moto G、One plus X、MI 4i和其他一些设备上检查过的大多数设备上都正常工作。每当我在redmi prime上运行它时,它都会给出一个如下所述的错误: 堆栈跟踪 进程:com.example.lordvoldemort.imagepicker,PID:23291 java.lang.RuntimeException:传递结果失败 ResultInfo{who=null,
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”
现在,以下代码在大多数设备上正常工作
我怀疑它能在很少的设备上可靠地工作。这在一定程度上取决于Uri来自何处
错误是-尝试对空对象引用调用接口方法“boolean android.database.Cursor.moveToFirst”
这是因为MediaStore无法识别Uri。您的getPathFromURI将在少数设备上对少数Uri值起作用,不过,这同样取决于Uri的来源
。Uri不需要有任何实际路径,除了stackoverflow.com Web服务器上的路径/questions/39355114/从gallery中选择图像,并在imageview中显示文件外,该视图是该问题URL的路径部分。那么像Whataspp或facebook这样的大公司如何在完全相同的设备上运行呢??我的工作一定有不足之处code@AmanVerma:那么像WhatApp或facebook这样的大公司如何在完全相同的设备上运行呢最有可能的是他们。例如,像毕加索这样的大多数图像加载库都知道如何使用Uri。在您的情况下,如果您打算长期使用图像,您可能需要制作图像的本地副本。在Android 4.4+上,您可以使用ACTION_OPEN_DOCUMENT、via,然后使用takePersistableUriPermissions长期访问内容。您仍然获得一个Uri,并且您仍然将该Uri用于图像加载库或手动使用ContentResolver。您得到解决方案了吗?面对同样的错误