使用Glide 4.9.0(最新)将图像从StorageReference加载到ImageView时遇到问题。
它被粘在PlaceHolder上。 当我尝试放置引用的可下载URL时,它就起作用了。
StorageReference ref = FirebaseStorage.getInstance().getReference().child("myImage")
//It's not working
Glide.with(mContext)
.load(ref)
.placeholder(R.drawable.ic_loading_circle)
.error(R.drawable.ic_loading_circle)
.into(mImageView);
//It's working
ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>()
{
@Override
public void onSuccess(Uri downloadUrl)
{
Glide.with(mContext)
.load(downloadUrl.toString())
.placeholder(R.drawable.ic_loading_circle)
.error(R.drawable.ic_loading_circle)
.into(mImageView);
}
});
使用try-catch时没有看到任何错误,我已经将Internet权限放入了清单中。可绘制的其他图像也可以工作
注意:我的firebase有2个应用程序使用,第一个应用程序在使用Glide时没有任何问题,但是第二个应用程序遇到了未知的问题。
任何解决方案或替代方案?因为使用getDownloadUrl()。addOnSuccessListener来获取URI太慢了
答案 0 :(得分:0)
适合您的解决方案是正确的解决方案。我做事的方式也一样。
profileListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String imageUrl = dataSnapshot.getValue(String.class);
if (ProfileFragment.this.getActivity() != null)
Glide.with(ProfileFragment.this.getActivity())
.load(imageUrl)
.placeholder(R.drawable.default_image)
.circleCrop()
.into(photoPhoto);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
如果您发现这件事变慢,只需在firebase中启用离线持久性即可。
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
在打开应用程序时调用任何FirebaseDatabase实例之前。
Firebase非常有效地管理同步。
注意:-在开发应用程序期间发现随机调用快照时,请尝试清除应用程序的数据或重新安装。
对我来说很好!
答案 1 :(得分:0)
我不认为Glide
支持StorageReference
是不同的协议,但是您可以使用支持此协议的FirebaseUI,并在幕后使用Glide
库。
答案 2 :(得分:0)
使用FirebaseUI,您可以快速轻松地下载,缓存和 使用我们与Glide的集成显示来自Cloud Storage的图像。
首先,将FirebaseUI添加到您的app / build.gradle:
依赖项{ //仅FirebaseUI存储 实现'com.firebaseui:firebase-ui-storage:4.3.1'}
然后,您可以将图像直接从存储设备加载到ImageView中:
// Reference to an image file in Cloud Storage
StorageReference storageReference = FirebaseStorage.getInstance().getReference();
// ImageView in your Activity
ImageView imageView = findViewById(R.id.imageView);
// Download directly from StorageReference using Glide
// (See MyAppGlideModule for Loader registration)
GlideApp.with(this /* context */)
.load(storageReference)
.into(imageView);
答案 3 :(得分:0)
以上答案对我不起作用。
在Glide 4.8.0
中,这对我有用:
首先请确保您的应用build.gradle
中有以下内容
implementation 'com.firebaseui:firebase-ui-storage:3.2.2'
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
2。然后使用以下代码从存储引用中加载图像
DrawableCrossFadeFactory factory =
new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
RequestOptions options =
new RequestOptions()
.centerCrop()
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.placeholder(R.drawable.your_progress_animation)
.error(R.drawable.ic_your_on_error_image);
// Download directly from StorageReference using Glide
// (See MyAppGlideModule for Loader registration)
Glide.with(getAppContext())
.load(item.reference)
.transition(withCrossFade(factory))
.apply(options)
.into(holder.signatureImageView);