Android,Firestore:GlideException:无法加载资源
我正试图从我的Android,Firestore:GlideException:无法加载资源,android,firebase,kotlin,firebase-storage,android-glide,Android,Firebase,Kotlin,Firebase Storage,Android Glide,我正试图从我的firebase存储中加载一个图像,并在我的Cardview中显示它,但它不起作用。我得到的唯一结果是:class com.bumptech.glide.load.engine.GlideException:加载资源失败和噢,出了问题(我自己的信息)。这是我的密码 XML GlideAppModule 依赖关系 堆栈跟踪(删失链接) 我正在从cloud firestore获取我的产品对象,我的cardview中的所有内容都已正确加载,但相应的图像除外 谢谢你的帮助 编辑 不幸的是,
firebase存储中加载一个图像,并在我的Cardview中显示它,但它不起作用。我得到的唯一结果是:class com.bumptech.glide.load.engine.GlideException:加载资源失败
和噢,出了问题代码>(我自己的信息)。这是我的密码
XML
GlideAppModule
依赖关系
堆栈跟踪(删失链接)
我正在从cloud firestore
获取我的产品对象,我的cardview中的所有内容都已正确加载,但相应的图像除外
谢谢你的帮助
编辑
不幸的是,向GlideApp添加侦听器不会提供额外信息
@BindingAdapter("loadImage")
fun setImageFromUrl(view: ImageView, url: String?) {
if (!url.isNullOrEmpty()) {
GlideApp
.with(view)
.load(url)
.addListener(
object : RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean,
): Boolean {
if (e != null) {
Timber.d("Exception ist ${e.stackTraceToString()}")
}
return false
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean,
): Boolean {
return false
}
}
)
.into(view)
} else {
Timber.d("Oh, Something went wrong!")
}
}
@BindingAdapter(“loadImage”)
fun setImageFromUrl(视图:ImageView,url:String?){
如果(!url.isNullOrEmpty()){
GlideApp
.带(视图)
.load(url)
.addListener(
对象:RequestListener{
覆盖加载失败(
e:例外情况?,
型号:有吗?,
目标:目标?,
isFirstResource:Boolean,
):布尔值{
如果(e!=null){
Timber.d(“异常ist${e.stackTraceToString()}”)
}
返回错误
}
覆盖资源就绪(
资源:可提取?,
型号:有吗?,
目标:目标?,
数据源:数据源?,
isFirstResource:Boolean,
):布尔值{
返回错误
}
}
)
.进入(视图)
}否则{
Timber.d(“哦,出了点问题!”)
}
}
错误仍然存在class com.bumptech.glide.load.engine.GlideException:加载资源失败
。加载图像的权限也从firebase cloud firestore
授予!!临时解决方案!!
所以我找到了解决问题的临时办法。而不是保存:
gs://censored.appspot.com/products/images/censored-SET_an238386.png
作为对图像的引用(这是正确的方法,但在这里它不起作用),通过单击提取https
然后,您将获得类似(此处审查)的内容:
将此https链接
保存到您的cloud firestore
数据库中,然后从那里获取它。与单独下载url链接相比,上述方法的优点是速度更快
但正如所说,这应该只是一个暂时的解决办法。我已经在Firebase UI GitHub存储库中打开了一个问题,我期待一个合适的解决方案!!临时解决方案!!
所以我找到了解决问题的临时办法。而不是保存:
gs://censored.appspot.com/products/images/censored-SET_an238386.png
作为对图像的引用(这是正确的方法,但在这里它不起作用),通过单击提取https
然后,您将获得类似(此处审查)的内容:
将此https链接
保存到您的cloud firestore
数据库中,然后从那里获取它。与单独下载url链接相比,上述方法的优点是速度更快
但正如所说,这应该只是一个暂时的解决办法。我在Firebase UI GitHub存储库中打开了一个问题,我期待一个合适的解决方案,它可以在java中与我一起工作
implementation 'com.firebaseui:firebase-ui-storage:3.2.1'
implementation 'com.google.firebase:firebase-storage:19.2.1'
implementation 'com.github.bumptech.glide:glide:4.11.0'
我在Firestore RecyclerView适配器中使用它
String imgPath = "images/"+membersModel.getUid();
StorageReference storageRef = FirebaseStorage.getInstance().getReference();
StorageReference imageRef = storageRef.child(imgPath);
imageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Glide.with(holder.VmemBpic.getContext())
.load(uri)
.placeholder(R.drawable.ic_user)
.circleCrop()
.error(R.drawable.ic_user)
.into(holder.VmemBpic);
String imgPath=“images/”+membersModel.getUid();
StorageReference storageRef=FirebaseStorage.getInstance().getReference();
StorageReference imageRef=storageRef.child(imgPath);
imageRef.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
Glide.with(holder.VmemBpic.getContext())
.load(uri)
.占位符(R.drawable.ic_用户)
.circleCrop()
.错误(R.drawable.ic_用户)
.into(holder.VmemBpic);
它在java中与我一起工作
implementation 'com.firebaseui:firebase-ui-storage:3.2.1'
implementation 'com.google.firebase:firebase-storage:19.2.1'
implementation 'com.github.bumptech.glide:glide:4.11.0'
我在Firestore RecyclerView适配器中使用它
String imgPath = "images/"+membersModel.getUid();
StorageReference storageRef = FirebaseStorage.getInstance().getReference();
StorageReference imageRef = storageRef.child(imgPath);
imageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Glide.with(holder.VmemBpic.getContext())
.load(uri)
.placeholder(R.drawable.ic_user)
.circleCrop()
.error(R.drawable.ic_user)
.into(holder.VmemBpic);
String imgPath=“images/”+membersModel.getUid();
StorageReference storageRef=FirebaseStorage.getInstance().getReference();
StorageReference imageRef=storageRef.child(imgPath);
imageRef.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
Glide.with(holder.VmemBpic.getContext())
.load(uri)
.占位符(R.drawable.ic_用户)
.circleCrop()
.错误(R.drawable.ic_用户)
.into(holder.VmemBpic);
移除fitCenter()
和try@ADM完全没有区别,仍然失败。在我看来,这与图像视图的大小和图像本身的大小有关ImageView
大小应该不是问题。首先尝试最小化问题。删除fitCenter()
并应用转换,确保设备上有internet。向Glide image load方法添加一个侦听器,并调试已删除的fitCenter()和异常@ADM。应用(/…)
,一点区别都没有。向Glide添加一个侦听器绝对没有用,因为它告诉我相同的GlideException:加载资源失败。Internet连接一直可用,否则它将永远无法获得存储参考
和所有其他产品详细信息ned生成和无效缓存
,没有任何帮助。请删除fitCenter()
和try@ADM完全没有区别,仍然失败。在我看来,这与图像视图的大小和
gs://censored.appspot.com/products/images/censored-SET_an238386.png
https://firebasestorage.googleapis.com/v0/b/censored.appspot.com
/o/products%2Fimages%2Fcensored-Leihgeraet_an326331.png?alt=media&token=censored-c92b-4153-a3f3-censored
implementation 'com.firebaseui:firebase-ui-storage:3.2.1'
implementation 'com.google.firebase:firebase-storage:19.2.1'
implementation 'com.github.bumptech.glide:glide:4.11.0'
String imgPath = "images/"+membersModel.getUid();
StorageReference storageRef = FirebaseStorage.getInstance().getReference();
StorageReference imageRef = storageRef.child(imgPath);
imageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Glide.with(holder.VmemBpic.getContext())
.load(uri)
.placeholder(R.drawable.ic_user)
.circleCrop()
.error(R.drawable.ic_user)
.into(holder.VmemBpic);