我正在尝试使用下面的代码从URI
中获取一个bitmap
,我能够做到这一点,但是我注意到我的应用程序在某些用户设备上崩溃,报告如下:
java.lang.NullPointerException:
at android.net.Uri$StringUri.<init> (Uri.java:495)
at android.net.Uri$StringUri.<init> (Uri.java:485)
at android.net.Uri.parse (Uri.java:457)
at maa.app.Activities.BaseActivity.getImageUri (BaseActivity.java:667)
at maa.app.Activities.BaseActivity.lambda$onCreate$28 (BaseActivity.java:606)
at maa.app.Activities.-$$Lambda$BaseActivity$otrrnQa86F40OaLtsUupF4NjzEs.onClick (-.java:2)
at android.view.View.performClick (View.java:6648)
at android.view.View.performClickInternal (View.java:6620)
at android.view.View.access$3100 (View.java:787)
at android.view.View$PerformClick.run (View.java:26167)
at android.os.Handler.handleCallback (Handler.java:891)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:207)
at android.app.ActivityThread.main (ActivityThread.java:7539)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:958)
这是从URI
那里获得bitmap
的方法
public static Uri getImageUriFromBitmap(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.PNG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
更新:
private Uri getImageUri(Context context, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), inImage, "Title", null);
File file = new File(path);
return Uri.fromFile(file);
}
答案 0 :(得分:1)
Uri.parse(String)要求您具有URI,而不是路径。要从路径获取Uri,请使用Uri.fromFile()
答案 1 :(得分:0)
如果您使用的是APILevel> = 21,请先调用该权限,否则它将返回 null 路径,并且可能会使您的应用程序崩溃。
权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
代码
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}