【问题标题】:Android - Firebase searching with filteringAndroid - 带有过滤的 Firebase 搜索
【发布时间】:2018-01-03 01:48:58
【问题描述】:

我正在开发一个应用程序,该应用程序将帮助用户搜索并下载其他用户以帖子形式上传的书籍。


为了首先下载书籍,用户应该根据标题等属性进行搜索。


满足用户要求的帖子应该显示在firebase-UI recyclerview中。


这是我的 Firebase 数据结构:


我想要创建一个 Query 的示例代码,它返回方便的帖子的 ID,例如 ImgBRr2YFYfAu1WwENS1Ucj6jz13_1514813350760


请帮我解决问题,欢迎任何建议和想法

【问题讨论】:

  • 你想在什么基础上从 firebase 搜索 id ?
  • 作者语言标题的值应与编辑文本字段中的文本相同
  • 所以您从用户那里获取authorlanguagetitle 的输入,并希望从firebase 获得这个帖子ID?
  • 是的,拜托,也许你可以帮助我创建一个查询,该查询将根据相似性范围返回 ID,例如从 100% 相似到 80% 相似。但可能是:D
  • 是的,它可以很容易地执行。

标签: android firebase firebase-realtime-database firebaseui


【解决方案1】:

这是你可以做的,

按语言搜索,然后按标题和作者过滤

public void search(String languangeSearchString, String title, String author){  
        FirebaseDatabase.getInstance().getReference().child("Posts").equalTo("language").startAt(languangeSearchString).addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                 String id = dataSnapshot.getKey();
                if(dataSnapshot.child("title").exists() && dataSnapshot.child("author").exists()){
                    if(dataSnapshot.child("title").getValue(String.class).equals(title) && dataSnapshot.child("author").getValue(String.class).equals(author)){
                        //Here are the results
                    }
                }           
            }

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

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

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

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

}

【讨论】:

  • 如何从您的方法中获取帖子的 ID?也请将此添加到您的答案中
【解决方案2】:

要对firebase-database 进行搜索,我们通常使用orderBy()。喜欢

firebaseDatabase.getReference("Posts").child("postId")
                        .orderBy("authorId")

但是不能使用多个orderBy()like,

firebaseDatabase.getReference("Posts").child("postId")
                     .orderBy("authorId")
                     .orderBy("title")     // this will throw an error
                     .orderBy("language") 

因此您只需要在一个child-node 上执行搜索。 欲了解更多信息,请查看此Query based on multiple where clauses in Firebase

【讨论】:

  • 问题是我不知道帖子的ID,因为它是哈希字符串代码......
  • 如图所示,您已将postid 保存在您的db 中,因此请使用它。
  • 我现在如何获取搜索帖子的 ID?你会怎么得到?
猜你喜欢
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 2015-12-14
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
相关资源
最近更新 更多