如何将 Firestore 数据库中的图像加载到 ImageView 中?

How do I load an image from FirestoreDatabase into ImageView?

我正在尝试将 Firebase 数据库中的图像加载到用户个人资料图片的 ImageView 中。

我试过的

我尝试使用 Glide 将图像从 Firestore 加载到 ImageView。我的代码如下所示:

FirebaseDatabase.getInstance().getReference("user").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
        for (DataSnapshot child: snapshot.getChildren()) { 
                User user = child.getValue(User.class);
                Glide.with(MapsActivity.this).load(user.getProfilePicture()).error(R.drawable.ic_baseline_person_24).placeholder(R.drawable.ic_baseline_person_24).into(profileImage);

        }

    }

    @Override
    public void onCancelled(@NonNull @NotNull DatabaseError error) {
       throw error.toException();
    }
});

但是,这不起作用。

我的 firebase 结构如下:

谢谢!

String url = FirebaseDatabase.getInstance().getReference("user/"+FirebaseAuth.getInstance().getCurrentUser().getUid().toString()+"/profilePicture").get().getResult().getValue().toString();

您正在加载整个 user 节点,其中包含多个用户的信息,因此您的 snapshot 包含所有这些用户的数据。

要处理这些多个用户,您必须在 onDataChange 中遍历 snapshot.getChildren():

FirebaseDatabase.getInstance().getReference("user").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
        for (DataSnapshot child: snapshot.getChildren()) { //  loop over child snapshots
            User user = child.getValue(User.class);
            Log.i("DB", user.toString());
        }
    }
    @Override
    public void onCancelled(@NonNull @NotNull DatabaseError error) {
        throw error.toException(); //  Never ignore errors
    }
});

如果您知道要显示其图像的用户的 UID,则可以只加载该用户:

                                                        //  user to load
FirebaseDatabase.getInstance().getReference("user").child(uid).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
        User user = child.getValue(User.class);
        Log.i("DB", user.toString());

    }
    @Override
    public void onCancelled(@NonNull @NotNull DatabaseError error) {
        throw error.toException(); //  Never ignore errors
    }
});

您不再需要遍历 getChildren(),因为现在代码只加载一个用户。