【问题标题】:Getting URI from Bitmap [java.lang.NullPointerException]从位图获取 URI [java.lang.NullPointerException]
【发布时间】:2019-12-24 22:48:57
【问题描述】:

我正在尝试从bitmap 获取URI,使用下面的代码,我能够做到这一点,但我注意到我的应用程序在某些用户设备上崩溃并出现以下报告:

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)

这是从bitmap 获取URI 的方法

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

【问题讨论】:

  • 您说某些设备运行良好,那么这可能是兼容性问题。是否调用了运行时权限?

标签: android bitmap uri


【解决方案1】:

如果您使用 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);
} 

【讨论】:

    【解决方案2】:

    Uri.parse(String) 要求你有一个 URI,而不是一个路径。要从路径中获取 Uri,请使用 Uri.fromFile()

    【讨论】:

    • 你的意思是这样Uri.fromFile(new File(path));
    • 很遗憾,不起作用,请看我的更新帖
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多