【发布时间】:2020-04-09 20:09:14
【问题描述】:
在我的应用程序中,我有一个多选对话框,其中包含用户应该能够选择的各种过滤器选项,以便根据文档的 rarity 字段过滤数据库。由于过滤器对话框中有许多选项,如果我们考虑过滤器的所有可能组合,手动覆盖每个案例将需要很长时间。考虑到这一点,我尝试创建一个起始查询,如下所示,然后我遍历用户选择的过滤器列表,并尝试将whereEqualTo("rarity",filter) 操作添加到每个过滤器的查询中。我注意到你不能像普通变量那样连接查询,例如var i += 5 所以我想知道这种问题是否有任何解决方案。 您是否可以实际应用多个 whereEqualTo 操作 分步/分段 在不覆盖之前应用的相同查询的情况下查询?
这是我在收到用户在我的 FilterActivity.kt 类中选择的过滤器后所尝试的:
class FilterActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_filter)
val db = FirebaseFirestore.getInstance()
val filters:ArrayList<String>? = intent.getStringArrayListExtra("filterOptions")
Log.d("FilterActivity", "filter options $filters")
var query = db.collection("Cards").orderBy("resID")
for(filter in filters!!) {
query = query.whereEqualTo("rarity",filter)
}
query.get().addOnSuccessListener { querySnapshot ->
if(querySnapshot.isEmpty) Log.d("FilterActivity","is empty")
for(doc in querySnapshot.documents) {
Log.d("FilterActivity", "${doc.getString("name")} - ${doc.getString("rarity")}")
}
}
}
}
【问题讨论】:
-
您可以根据需要链接 whereEqualTo 操作。但是这段代码有什么问题呢?
-
当我尝试在查询对象上使用 += 运算符时,我在编译之前从 IDE 收到错误,但我看不到错误弹出窗口,因为它闪烁太快并且由于某种原因不闪烁
-
如果应用程序崩溃,会有一个堆栈跟踪。请在 logcat 上查找,并将其添加到您的问题中。
-
@AlexMamo 问题是由于查询中的 += 运算符,该应用程序甚至无法运行。我正在使用 Run 中的日志更新我的帖子
标签: android firebase kotlin google-cloud-firestore