In my app, I have a multiple-choice dialog with various filter options that the user should be able to choose in order to filter the database based on the rarity
field of the documents. Since there are many options in the filter dialog, covering each case by hand would take ages if we take into account all the possible combinations of the filters. With that in mind, I tried creating a starting query as you can see below and then I iterate through the list of filters selected by the user and try to add a whereEqualTo("rarity",filter)
operation to the query for each filter. I noticed that you can't concatenate queries like with normal variables e.g. var i += 5
so i would like to know if there is any solution to this kind of issue. Can you actually apply multiple whereEqualTo
operations in the same query in steps/pieces without overriding the previously applied operations on that same query?
Here's what I've tried after receiving the filters selected by the user in my FilterActivity.kt class:
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")}")
}
}
}
}