Android:Firebase中的搜索查询

时间:2017-03-11 07:54:13

标签: android firebase-realtime-database

我目前正在开发一个由FIREBASE支持的Android项目。当我在SQL中执行类似于select语句的查询时,它不会给我预期的结果。

我的FIREBASE数据库如下所示:

enter image description here

我使用的代码如下:

 ref = FirebaseDatabase.getInstance().getReference().child("DiscussionForumPosts");
    ref.orderByChild("discussionName").equalTo(discussion_name_from_bundle)
    .addChildEventListener(new ChildEventListener() {

        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            DiscussionPostReadModel model = dataSnapshot.getValue(DiscussionPostReadModel.class);
        }
      //other predefined methods
 }

discussion_name_bundle是我从上一个活动获得的字符串变量。

我的DiscussionPostReadModel.java看起来像这样:

public class DiscussionPostReadModel {
public String discussionName, discussionMessage, userName;

public DiscussionPostReadModel(){}

public DiscussionPostReadModel(String discussionName, String discussionMessage,  String userName){
    this.discussionName = discussionName;
    this.discussionMessage = discussionMessage;
    this.userName = userName;
}

public String getDiscussionName(){
    return discussionName;
}
public String getDiscussionMessage(){
    return discussionMessage;
}
public String getUserName(){
    return userName;
}
}

我实际上需要系统只获取 discussionName 等于变量discussion_name_from_bundle的节点。相反,它返回给我在FIREBASE数据库中 discussionForumPost 中找到的所有孩子。

请帮助我执行仅检索满足相等条件的子项的功能。提前谢谢。

1 个答案:

答案 0 :(得分:0)

要仅检索一个结果,您还需要使用limitToFirst(wantedNumberOfResults)方法。

你会像这样实现它:

  ref = FirebaseDatabase.getInstance().getReference().child("DiscussionForumPosts");
            ref.orderByChild("discussionName").equalTo(DiscussionForumPosts).limitToFirst(1).addChildEventListener(new ChildEventListener() {

    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {

        DiscussionPostReadModel model = dataSnapshot.getValue(DiscussionPostReadModel.class);
    }
  //other predefined methods
 }