Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 科特林多搜索火基_Firebase_Firebase Realtime Database_Kotlin - Fatal编程技术网

Firebase 科特林多搜索火基

Firebase 科特林多搜索火基,firebase,firebase-realtime-database,kotlin,Firebase,Firebase Realtime Database,Kotlin,我正试图将这段代码转换成一个多用户搜索,即不仅仅是一个城市,还包括州和国家 我在xml中有3个搜索输入窗口,getter和setter已经准备好了,但是我还没有看到任何代码来实现我想要做的事情:它只会按城市查找用户 private fun firebaseUserSearch(searchText: String) { Toast.makeText(this@MainActivity, "Started Search", Toast.LENGTH_LONG).sho

我正试图将这段代码转换成一个多用户搜索,即不仅仅是一个城市,还包括州和国家

我在xml中有3个搜索输入窗口,getter和setter已经准备好了,但是我还没有看到任何代码来实现我想要做的事情:它只会按城市查找用户

private fun firebaseUserSearch(searchText: String) {

    Toast.makeText(this@MainActivity, "Started Search", Toast.LENGTH_LONG).show()

    val firebaseSearchQuery = mUserDatabase!!.orderByChild("name").startAt(searchText).endAt(searchText + "\uf8ff")


    val options = FirebaseRecyclerOptions.Builder<Users>()
            .setQuery(
                    firebaseSearchQuery, Users::class.java!!)
            .build()

    
private fun firebaseUserSearch(searchText:String){
Toast.makeText(this@MainActivity,“开始搜索”,Toast.LENGTH\u LONG.show()
val firebaseSearchQuery=mUserDatabase!!.orderByChild(“名称”).startAt(searchText).endAt(searchText+“\uf8ff”)
val options=FirebaseRecyclerOptions.Builder()
.setQuery(
firebaseSearchQuery,用户::class.java!!)
.build()
因此,使用此代码,我只能搜索一个孩子所在的城市,并获得居住在该城市的用户。我希望搜索城市、州、国家。提前感谢您的帮助


您不能在单个查询中按子项添加超过个的e order 按if else条件接收数据后对其进行排序

Firebase中不允许使用多个orderBy

试试这个

userDatabase.orderByChild("townCity").startAt(searchText).addValueEventListener( new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
 log.i("data", dataSnapshot.toString());
}

@Override
public void onCancelled(DatabaseError databaseError){

}
});

遗憾的是,如果不对数据库的结构进行一些更改,则无法使用Firebase realtime数据库根据三个属性筛选结果。realtime数据库无法对多个属性执行筛选(使用许多人用SQL术语说的“多WHERE子句”)。但是,有一种变通方法可以帮助您使用复合属性筛选两个或多个属性的结果,如我在以下帖子中的回答所述:

因此,在您的情况下,您要查找的属性的组合是一个字符串值,它在组合中具有
城市/城镇
州/市
国家


无论如何,在链接多个
where()时如果你考虑在某个时候尝试使用,除了这个特性之外,你还会发现更多。

你不能在单查询中添加更多的E顺序,你可以在IF条件下接收数据之后排序它,所以你基本上想要搜索三个属性,对吗?请用@回答。AlexMamo@AlexMamo对我刚刚在问题(链接)中发布了一张用户界面的图片回答你的问题。是的,我想搜索三个属性。谢谢你的提问。@JSL你解决了关于搜索三个属性的问题了吗?@AlexMamo非常感谢你的提问。不,我没有解决。我一直在搜索互联网。我没有在任何地方看到论坛答案或视频解释它。代码是“Hello world”回复者给了我一个红色的错误“日志”。至于稍后的“排序”,也没有(论坛或视频)关于(如果-否则排序)。非常令人沮丧。我将感谢您的帮助。再次感谢。关于如何使用像Algolia这样的第三方搜索服务,请查看我的答案。我单击了它。当我这样做时,它会显示>>“声誉低于15的人所投的票会被记录下来,但不会改变公开显示的帖子分数。”感谢您的时间和信息。我意识到我需要的是更深入的搜索功能,所以我正在查看关于弹性搜索/SQL的教程。我还没有找到一种方法来解决我试图实现的问题。非常感谢。