首页 > 解决方案 > 如何访问 Firebase 中具有随机密钥的节点?

问题描述

我想访问 projectImageUrl,但问题出在 Projects 和项目 Image URL 之间,每个项目都有一个随机键,因此每个项目都应该有一个唯一的名称,那么我该如何访问 projectImageUrl?

在此处输入图像描述 在此处输入图像描述

标签: javaandroidfirebasefirebase-realtime-database

解决方案


如何访问 Firebase 中具有随机密钥的节点?

这实际上不是随机的。正如我在您的数据库架构中看到的那样,您使用作为用户对象的键,即与日期和时间连接的 UID 的值。日期和时间都已经是 User 对象的一部分。确实没有必要将它们与 UID 一起添加,因为 UID 已经是唯一的。无需添加任何其他内容以使其“更加”独特。我的建议是只使用 UID,仅此而已。在这种情况下,要获取 projectImageUrl 节点下存在的 URL,请使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference projectImageUrlRef = rootRef.child("Projects").child(uid).child("projectImageUrl");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String url = ds.getValue(String.class);
            Log.d("TAG", url);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
};
projectImageUrlRef.addListenerForSingleValueEvent(valueEventListener);

logcat 中的结果将是 projectImageUrl 节点下存在的 URL。如果需要保留日期和时间,请将 projectImageUrlRef 更改为:

DatabaseReference projectImageUrlRef = rootRef.child("Projects").child(uid + date + time).child("projectImageUrl");

该日期应包含“2020 年 10 月 6 日”的值和“16:37:9”的时间。


推荐阅读