android - 在 Glide 的 getDrawable 方法中获取 NullPointerException
问题描述
我有一个图像视图,我想获得它的位图......
这是我的代码:
设置图像视图:
ImageView imageView;
imageView = findViewById(R.id.image_wallpaper);
Glide.with(this).load(current_image.getImageURL()).into(imageView);
获取位图:
setButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
DisplayMetrics metrics = new DisplayMetrics();
imageView.invalidate(); // I get the crash with or without that line
Bitmap mBitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); // CRASH HERE
// more things using the mBitmap
}
});
崩溃日志:
Fatal Exception: java.lang.NullPointerException
Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()' on a null object reference
com.XXXX.XXXXXXX.ImageActivity$4.onClick (ImageActivity.java:170)
android.view.View.performClick (View.java:5246)
android.view.View$PerformClick.run (View.java:21200)
android.os.Handler.handleCallback (Handler.java:739)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:145)
android.app.ActivityThread.main (ActivityThread.java:6946)
java.lang.reflect.Method.invoke (Method.java)
java.lang.reflect.Method.invoke (Method.java:372)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1404)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1199)
我正在使用 Glide 的最新版本:
implementation 'com.github.bumptech.glide:glide:4.9.0' // glide
此崩溃日志来自 Firebase Crashlytics,很多用户都会收到该错误,但我无法在我的设备上重现它。
有什么问题?我该如何解决?
谢谢
解决方案
Glide 库中有一个方法可以获取位图,可以使用该方法获取位图并设置到 Imageview 中。
您还可以使用可绘制资源来代替“图像路径”。
Glide.with(context)
.asBitmap()
.placeholder(placeholder)
.error(placeholder)
.load(
"imagepath"
)
.into(object : CustomTarget<Bitmap>() {
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
// here you will get Bitmap file and you can use it to set on image view.
image.setImageBitmap(resource)
}
override fun onLoadCleared(placeholder: Drawable?) {
// this is called when imageView is cleared on lifecycle call or for some other reason.
// if you are referencing the bitmap somewhere else too other than this imageView clear it here as you can no longer have the bitmap.
}
})
推荐阅读
- aws-iam - 限制,当我尝试在 AWS 中获取凭证报告时超出资源限制
- java - 在 Java 中使用布尔值打印无效命令
- r - 值匹配字符串 R
- html - 将图像 div 与旁边的文本 div 的垂直中心对齐
- backbone.js - 可以主干模型具有属性主干模型简单数组
- wordpress - 我应该为电子商务网站使用解耦的 WordPress 吗?
- r - 与 r 闪亮的仪表板侧边栏面板的绝对面板碰撞
- regex - POSIX sh:用函数查找和替换
- postgresql - Postgres 中的变化指数
- c# - 找不到 System.IO.Fakes.ShimDirectory.GetAccessControl