Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Android 如何合并两个Firestore查询以作为Kotlin上的选项传递_Android_Firebase_Kotlin_Google Cloud Firestore - Fatal编程技术网

Android 如何合并两个Firestore查询以作为Kotlin上的选项传递

Android 如何合并两个Firestore查询以作为Kotlin上的选项传递,android,firebase,kotlin,google-cloud-firestore,Android,Firebase,Kotlin,Google Cloud Firestore,我正在尝试合并两个查询,以将它们作为选项传递到FirestoreRecyclerView上。我找到的所有方法将只合并任务,因此我可以在setQuery上传递任务。下面是我的查询1和查询2,我需要将它们合并到一个查询中显示。我怎样才能做到这一点 val query1 = firestoreRepo.getAllGames() .whereEqualTo(Constants.PLAYER1ID, currentUserID) .wher

我正在尝试合并两个查询,以将它们作为选项传递到FirestoreRecyclerView上。我找到的所有方法将只合并任务,因此我可以在setQuery上传递任务。下面是我的查询1和查询2,我需要将它们合并到一个查询中显示。我怎样才能做到这一点

        val query1 = firestoreRepo.getAllGames()
            .whereEqualTo(Constants.PLAYER1ID, currentUserID)
            .whereEqualTo("player2Id", argsId)
    
        val query2 = firestoreRepo.getAllGames().whereEqualTo("player2Id", currentUserID)
            .whereEqualTo("player1Id", argsId)


        val options: FirestoreRecyclerOptions<Games> = FirestoreRecyclerOptions.Builder<Games>()
            .setQuery(query, Games::class.java)
            .setLifecycleOwner(this)
            .build()
val query1=firestorepo.getAllGames()
.whereEqualTo(Constants.PLAYER1ID,currentUserID)
.whereEqualTo(“player2Id”,argsId)
val query2=firestorepo.getAllGames().whereEqualTo(“player2Id”,currentUserID)
.whereEqualTo(“player1Id”,argsId)
val选项:FirestoreRecyclerOptions=FirestoreRecyclerOptions.Builder()
.setQuery(查询,游戏::class.java)
.setLifecycleOwner(此)
.build()


很遗憾,您无法将两个查询传递给FirestorePagingOptions,只允许一个查询。如果需要两个查询的结果,则应使用方法,如以下代码行中所示:

val query1 = firestoreRepo.getAllGames()
    .whereEqualTo(Constants.PLAYER1ID, currentUserID)
    .whereEqualTo("player2Id", argsId)

val query2 = firestoreRepo.getAllGames()
    .whereEqualTo("player2Id", currentUserID)
    .whereEqualTo("player1Id", argsId)

val firstTask = query1.get()
val secondTask = query2.get()

val combinedTask: Task<*> = Tasks.whenAllSuccess<Any>(firstTask, secondTask).addOnSuccessListener {
    //Do what you need to do with your list
}
val query1=firestorepo.getAllGames()
.whereEqualTo(Constants.PLAYER1ID,currentUserID)
.whereEqualTo(“player2Id”,argsId)
val query2=firestorepo.getAllGames()
.whereEqualTo(“player2Id”,当前用户ID)
.whereEqualTo(“player1Id”,argsId)
val firstTask=query1.get()
val secondTask=query2.get()
val combinedTask:Task=Tasks.whenAllSuccess(第一个任务,第二个任务)。addOnSuccessListener{
//用你的列表做你需要做的事情
}

重写onSuccess()方法时,结果是对象列表。因为两个查询都返回类型为
Games
的对象,所以您只需将列表中的对象强制转换为类型为
Games
的对象即可。在这种情况下,您将无法再使用Firebase UI库。虽然不完美,但它会起作用。

我尝试了这种方法,但在“回收者”视图中显示项目时仍然存在问题。我添加了
val gamesumtablelist:List=it.filterIsInstance()gamesList.addAll(gamesumtablelist)}
以将列表投射到我的类游戏中,并将其添加到要显示的游戏列表中,但它不起作用。在这种情况下,请添加数据库的屏幕截图和游戏类的内容。我添加了两个屏幕截图。当我尝试只使用一个查询时,recyclerview显示正常。我将FIrestoreAdapter更改为常规适配器,我需要显示游戏。您确定数据库中至少有满足这两个条件的文档吗?恐怕你没有。除此之外,我认为一个查询就足以得到像截图中那样的文档。是的,我终于做到了。在尝试了一系列解决方法之后,我创建了一个额外的player=player1+“”+player2字段,然后用where子句查询它