【问题标题】:How to retrieve unique key from firebase realtime database如何从 Firebase 实时数据库中检索唯一密钥
【发布时间】:2019-01-29 12:49:53
【问题描述】:

我收到此错误,我认为它无法从firebase 读取unique key,因为我使用了push() 函数。它实际上有 1 个来自用户的唯一 id,在它下面还有一个由 push 函数生成。

W/ClassMapper:在类上找不到 -LX96YLmx5G_w8yEDTgi 的设置器/字段 com.official.roomv1.Caller.Advertise 在 com.official.roomv1.Caller.Advertise 类上找不到 -LX95gJQNfc9sN81LY3_ 的设置器/字段 在 com.official.roomv1.Caller.Advertise 类上找不到 -LX95T40zIbRfCRmZpFo 的设置器/字段

这适用于安卓应用。它可以从push()函数中读取其他不使用唯一键的数据。

public DatabaseHelper() {
    firebaseDatabase = FirebaseDatabase.getInstance();
    reference = firebaseDatabase.getReference("Property");
}

public void readProperty(final DataStatus dataStatus){
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            property.clear();
            List<String> keys = new ArrayList<>();
            for (DataSnapshot keyNode : dataSnapshot.getChildren()){
                keys.add(keyNode.getKey());
                Advertise advertise = keyNode.getValue(Advertise.class);
                property.add(advertise);
            }
            dataStatus.DataIsLoaded(property,keys);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

}

这是我当前的数据库测试

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    看起来您的 JSON 有两个嵌套级别:

    1. UID
    2. 推送 ID

    所以基本上你似乎有每个用户的属性列表。这意味着您的代码需要两个循环:一个用于用户,一个用于该用户的属性。

    在代码中:

    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        property.clear();
        List<String> propertyKeys = new ArrayList<>();
        for (DataSnapshot userSnapshot : dataSnapshot.getChildren()){
            for (DataSnapshot propertySnapshot : userSnapshot.getChildren()){
                propertyKeys.add(propertySnapshot.getKey());
                Advertise advertise = propertySnapshot.getValue(Advertise.class);
                property.add(advertise);
            }
        }
        dataStatus.DataIsLoaded(property, propertyKeys);
    }
    

    【讨论】:

      【解决方案2】:

      我看不出你在哪里使用 push()。但从那里你必须得到你的按键。

      获取按键的方法如下:

      String pushID= reference.push().getKey();
      

      然后,您在此处进行更新:

      reference.pushID.addValueEventListener(new ValueEventListener() { ..... }
      

      您添加推送 ID,并且您有特定的方式来处理您的数据。希望你能理解。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-11
        • 1970-01-01
        • 2017-07-07
        相关资源
        最近更新 更多