在Android上查询Firebase

时间:2015-11-27 11:21:53

标签: android firebase firebase-realtime-database

这是我的数据:

extension

现在我想得到' name'并且' id'在哪里'性别'是" m"

请有人告诉我如何从Android客户端向firebase发出这样的查询。

我尝试过firebase提供的教程和其他一些链接,但没有通过。

大多数解决方案都是Javascript我需要在firebase的java api中使用Android。

我试过这个

{
  "users" : {
    "00c49c66-7ac8-9a48-7c4541d8bac6" : {
      "email" : "d@gmail.com",
      "gender" : "m",
      "name" : "deepak",
      "user_id" : "00c49c66-7ac8-9a48-7c4541d8bac6"
    },
    "1cb9c1de-1fcf-a2cc-bf78c84e03c8" : {
      "email" : "e@gmail.com",
      "gender" : "f",
      "name" : "ekta",
      "user_id" : "1cb9c1de-1fcf-a2cc-bf78c84e03c8"
    },
    "38211c3f-6c48-8987-0c698b9b9b52" : {
      "email" : "c@gmail.com",
      "gender" : "m",
      "name" : "chirag",
      "user_id" : "38211c3f-6c48-8987-0c698b9b9b52"
    },
    "a536cf1f-419f-9658-cfb5f5a8ec78" : {
      "email" : "a@gmail.com",
      "gender" : "m",
      "name" : "aniket",
      "user_id" : "a536cf1f-419f-9658-cfb5f5a8ec78"
    },
    "c80d828d-48d7-a79a-9cc558cd1960" : {
      "email" : "b@gmail.com",
      "gender" : "f",
      "name" : "bhakti",
      "user_id" : "c80d828d-48d7-a79a-9cc558cd1960"
    }
  }
}

1 个答案:

答案 0 :(得分:3)

您的查询代码看起来正确,但您不打印用户。

由于您要添加ChildEventListener,因此会为每个孩子调用它:

queryRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {

        //long longChildCount = dataSnapshot.getChildrenCount();

        // tvData.setText(dataSnapshot).toString();
        tvData.setText(s);

    }

dataSnapshot参数包含有关单个用户的信息。要打印他们的密钥,姓名和电子邮件:

queryRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        System.out.println(dataSnapshot.key());
        System.out.println(dataSnapshot.child("name").getValue());
        System.out.println(dataSnapshot.child("email").getValue());
    }

或者,您可以使用ValueEventListener一次性倾听所有孩子。

private static class User {
    String email;
    String gender;
    String name;
    @JsonProperty("user_id")
    String userId;

    public String getEmail() { return email; }
    public String getGender() { return gender; }
    public String getName() { return name; }
    public String getUserId() { return userId; }
}
queryRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot child: dataSnapshot.getChildren()) {
            User user = child.getValue(User.class);
            System.out.println(user.getEmail());
        }
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {
    }
});

在最后一个片段中,我还使用User类来获取DataSnapshot的数据。随着应用程序的增长,这比不断调用DataSnapshot.child()更方便。

section on reading data in the Firebase documentation

中介绍了这一点