Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 避免使用Recycleview从Firebase重新加载图像_Android_Firebase_Android Recyclerview_Firebase Storage - Fatal编程技术网

Android 避免使用Recycleview从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

我有一个循环视图,可以将不同的图像加载到Firebase存储中。当我滚动我的循环视图时,它每次都加载相同的图像(就像循环视图的定义一样)

我如何下载这些图片一次,并附加到我的循环视图,这样它就不会在滚动时重新加载

我试过这样做。

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