尝试在viewholder类中检索图像

时间:2018-02-27 21:43:27

标签: android firebase firebase-storage

我正在开发一个开源消息传递应用程序,负责显示我的联系人列表以及生成他们的头像和名称的类是一个视图类而不是一个活动。因此,我收到一条错误消息,指出Firebase无法连接。我已经有一个上传firebase功能,现在我想要检索这些图片。如果我没错,我认为firebase upload / fetch方法必须在活动类中吗?因为视图持有者类没有oncreate方法来初始化变量。

如果那个正在处理它的班级,我如何检索所有用户的个人资料照片? 它遍历所有try-catch括号,但它没有连接。

这是我尝试过的,但是我收到了令牌错误。

public class ContactItemViewHolder<I extends ContactItem>
    extends RecyclerView.ViewHolder {
..
..
StorageReference storageRef, riversRef;
private Bitmap myImage;
FirebaseStorage storage;

protected void bind(I item, @Nullable OnContactClickListener<I> listener) {
        Author author = item.getContact().getAuthor();
        //accessing the firebase storage
        storage = FirebaseStorage.getInstance();
        //creates a storage reference
        storageRef = storage.getReference();
        riversRef=storageRef.child(author.getName() + "/pic");
        String contactName = author.getName();
        name.setText(contactName);
        try{
            File localFile = File.createTempFile("images", "jpg");
            riversRef.getFile(localFile)
                    .addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
                            // Successfully downloaded data to local file
                            // ...
                            myImage = BitmapFactory.decodeFile(localFile.getAbsolutePath());
                            Drawable d = new BitmapDrawable(myImage);
                            avatar.setImageDrawable(d);

                        }
                    }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Handle failed download
                    // ...
                }
            });
        }
        catch(Exception e){

        }

1 个答案:

答案 0 :(得分:0)

您要做的是,将firebase数据直接加载到recyclerview中,或者创建一个包含所需属性的模型类,并将数据插入到recyclerview的父类中。由于Firebase是异步的,您可以在OnSuccessListener中设置recyclerview的适配器,并在获取数据时立即加载recyclerview。