Android 避免使用Recycleview从Firebase重新加载图像
我有一个循环视图,可以将不同的图像加载到Firebase存储中。当我滚动我的循环视图时,它每次都加载相同的图像(就像循环视图的定义一样) 我如何下载这些图片一次,并附加到我的循环视图,这样它就不会在滚动时重新加载 我试过这样做。Android 避免使用Recycleview从Firebase重新加载图像,android,firebase,android-recyclerview,firebase-storage,Android,Firebase,Android Recyclerview,Firebase Storage,我有一个循环视图,可以将不同的图像加载到Firebase存储中。当我滚动我的循环视图时,它每次都加载相同的图像(就像循环视图的定义一样) 我如何下载这些图片一次,并附加到我的循环视图,这样它就不会在滚动时重新加载 我试过这样做。 public void onBindViewHolder(final TodaysBdayViewHolder holder, int position) { storageReference=FirebaseStorage.getInstance
public void onBindViewHolder(final TodaysBdayViewHolder holder, int position)
{
storageReference=FirebaseStorage.getInstance().getReference().child("profiles/"+contacts.get(position)+".jpg");
final File localFile=File.createTempFile("profile_pic","jpeg",new File(context.getExternalFilesDir("null").getAbsolutePath()));
storageReference.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
Log.i("app","FinishIntro Img loaded");
Bitmap bitmap= BitmapFactory.decodeFile(localFile.getAbsolutePath());
holder.FriendPhoto.setImageBitmap(bitmap);
}
}).addOnFailureListener(new OnFailureListener() {
public void onFailure(@NonNull Exception e) {
}
});
}
public void onBindViewHolder(最终的TodaysBdayViewHolder,int位置)
{
storageReference=FirebaseStorage.getInstance().getReference().child(“profiles/”+contacts.get(position)+.jpg”);
最终文件localFile=File.createTempFile(“profile_pic”,“jpeg”,新文件(context.getExternalFilesDir(“null”).getAbsolutePath());
storageReference.getFile(localFile).addOnSuccessListener(新的OnSuccessListener()){
成功时公共无效(FileDownloadTask.TaskSnapshot TaskSnapshot){
Log.i(“应用程序”,“加载完成Img”);
位图位图=BitmapFactory.decodeFile(localFile.getAbsolutePath());
holder.FriendPhoto.setImageBitmap(位图);
}
}).addOnFailureListener(新的OnFailureListener(){
public void onFailure(@NonNull异常e){
}
});
}
您正在从文件中自行解码位图,这不是很有效。相反,我建议使用一个能高效地完成这些事情的库,比如或
毕加索方法:
添加到gradle:
implementation 'com.squareup.picasso:picasso:2.71828'
并在加载时执行此操作:
//the file
final File localFile=File.createTempFile("profile_pic","jpeg",new File(context.getExternalFilesDir("null").getAbsolutePath()));
//the reference
storageReference=FirebaseStorage.getInstance().getReference().child("profiles/"+contacts.get(position)+".jpg");
//the call
storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
// use this uri in picasso call into imageview
Picasso.get().load(uri.toString()).into(holder.FriendPhoto);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
});
//文件
最终文件localFile=File.createTempFile(“profile_pic”,“jpeg”,新文件(context.getExternalFilesDir(“null”).getAbsolutePath());
//参考文献
storageReference=FirebaseStorage.getInstance().getReference().child(“profiles/”+contacts.get(position)+.jpg”);
//电话
storageReference.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
//在picasso调用imageview时使用此uri
Picasso.get().load(uri.toString()).into(holder.FriendPhoto);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理任何错误
}
});
您可以使用缓存图像并在图像视图上显示它
public void onBindViewHolder(final TodaysBdayViewHolder holder, int position)
{
storageReference = FirebaseStorage.getInstance().getReference().child("profiles/"+contacts.get(position)+".jpg");
// get the download URL
storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
public void onSuccess(Uri uri) {
// load and cache with glide
Glide.with(context)
.load(uri)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(holder.FriendPhoto);
}
}).addOnFailureListener(new OnFailureListener() {
public void onFailure(@NonNull Exception e) {
}
});
}
public void onBindViewHolder(最终的TodaysBdayViewHolder,int位置)
{
storageReference=FirebaseStorage.getInstance().getReference().child(“profiles/”+contacts.get(position)+.jpg”);
//获取下载URL
storageReference.getDownloadUrl().addOnSuccessListener(新OnSuccessListener()){
成功时的公共无效(Uri){
//使用glide加载和缓存
带(上下文)滑动
.load(uri)
.diskCacheStrategy(diskCacheStrategy.ALL)
.into(holder.FriendPhoto);
}
}).addOnFailureListener(新的OnFailureListener(){
public void onFailure(@NonNull异常e){
}
});
}