【问题标题】:How to get out the stored data from Firebase?如何从 Firebase 中取出存储的数据?
【发布时间】:2023-03-16 12:53:01
【问题描述】:

我没有从 Firebase 数据库获取输出。它没有返回任何东西。这是我的数据结构。

我也尝试通过查询获取值,但它返回数据库错误:

无法将 java.util.hashmap 转换为字符串

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference().child("Member").push();

myRef.addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {

          for (DataSnapshot ds : dataSnapshot.getChildren()) {

              String value = ds.getValue(String.class);
              Log.d("Tag", "Value is" + value);
          }
      }

JSON:

{
  "Member" : {
    "-LhKJVG1Tj2628sHPg4D" : {
      "age" : "21",
      "name" : "Gagan",
      "nickname" : "Gaggi"`enter code here`
    },
    "-LhKKaNFnPrrh1bQNPfH" : {
      "age" : "18",
      "name" : "Jashan",
      "nickname" : "Jassi"
    }
  }
}

【问题讨论】:

  • 能否分享一下数据库结构
  • 我是一个新的贡献者。所以,不能分享图片。我的数据库结构由成员下的孩子(由firebase提供的ID)下的名称,年龄,昵称组成。
  • 最好将代码和结构包含为文本,而不是链接和图像。要获取您的 Firebase 结构,请使用 Firebase 控制台->导出 JSON,然后复制并粘贴您的结构的 sn-p。见images and links are evil
  • 现在检查一下,我也发布了数据库结构的Json文件。
  • 这不是您从 Firebase 读取数据的方式,push() 不合适。还有其他问题,但您必须首先正确处理该部分。请参阅 Firebase 文档Filtering Data。您应该阅读整个指南,但过滤部分中的示例正是您想要的。

标签: java firebase firebase-realtime-database


【解决方案1】:

您不能使用 String.class 调用 getValue,因为它不符合方法调用的条件。

来自文档

public T getValue(Class valueType)

此方法用于将此快照中包含的数据编组到您选择的类中。该类必须符合 2 个简单的约束: 该类必须有一个不带参数的默认构造函数 该类必须为要分配的属性定义公共 getter。反序列化实例时,没有公共 getter 的属性将设置为其默认值 示例类可能如下所示:

 class Message {
     private String author;
     private String text;

     private Message() {}

     public Message(String author, String text) {
         this.author = author;
         this.text = text;
     }

     public String getAuthor() {
         return author;
     }

     public String getText() {
         return text;
     }
 }


 // Later
 Message m = snapshot.getValue(Message.class);

【讨论】:

    【解决方案2】:

    你可以使用String

    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name= ds.child("name").getValue(String.class);
            String age= ds.child("age").getValue(String.class);
            //and similar for others
            Log.d("TAG", email + " / " + name);
        }
    }
    

    【讨论】:

    • 在孩子身上是的,但不像 OP 那样直接。
    猜你喜欢
    • 2019-08-14
    • 2019-06-27
    • 1970-01-01
    • 2021-05-02
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多