簡體   English   中英

如何將 EditText 值與存儲在 firestore 中的數組值進行比較?

[英]How to compare EditText value with array value stored in firestore?

addaddress.setOnClickListener {
            val pincoder = zipcode.text.toString().trim()
            val pinCodeList = listOf("201014", "201301")
            val productsRef =  FirebaseFirestore.getInstance().collection("Pincode")
                .document("zipcollect").collection("zipcodes")
            productsRef.whereArrayContainsAny("pin_code", pinCodeList).get().addOnCompleteListener {
                if (pincoder.equals(it.isSuccessful.toString()) == 0)
                {
                    for (document in it.result!!) {
                        Log.d(TAG, document.id + " => " + document.data)
                        Toast.makeText(this,"We Deliver Here!", Toast.LENGTH_SHORT).show()
                    }
                }
                else {
                    Toast.makeText(this,"We Don't Deliver Here!", Toast.LENGTH_SHORT).show()
                }
            }

firebase結構

這是存儲在 firestore 中的數據的屏幕截圖

你不能告訴 Firestore,嘿,Firestore 會返回所有文件,其中pin_code數組包含pinCodeList的所有元素。

要解決此問題,您可以考慮使用 Map 而不是數組。 您的文檔應如下所示:"

pin_codes
   |
   --- code_one: 201014
   |
   --- code_two: 303007
   |
   --- code_three: 201301

然后對每個代碼執行單獨的查詢,如下所示:

val firstCodeQuery = productsRef.whereIn("pin_codes.code_one", Arrays.asList("201014", "201301"))
val firstTask = firstCodeQuery.get()

對第二個和第三個查詢執行相同的操作。 如果List中的值之一在Map中不存在,在Map中不存在,則停止查詢。 如果都存在,只需使用我在以下帖子中的回答在客戶端上收集結果:

或者,您可以對列表中的每個元素執行whereArrayContains操作。

whereArrayContainsAny可以對文檔的集合和返回列表執行,並且您正在嘗試獲取字段。

數組包含任何

使用 array-contains-any 運算符將同一字段上的最多 10 個 array-contains 子句與邏輯或組合起來。 array-contains-any 查詢返回給定字段是包含一個或多個比較值的數組的文檔:

您可以在此處閱讀有關array-contains-any的更多詳細信息 您可以像這樣執行您的操作

val pincoder = zipcode.text.toString().trim()
FirebaseFirestore.getInstance()
    .collection("Pincode")
    .document("zipcollect")
    .collection("zipcodes")
    .document("Am0U....<Fill your doc ref>").get()
    .addOnCompleteListener {
        it.let {
            if (it.isSuccessful && it.result != null) {
                val pinCodeList = it.result["pin_code"] as List<String>
                if(pinCodeList.contains(pincoder)){
                    Toast.makeText(this,"We Deliver Here!", Toast.LENGTH_SHORT).show()
                }else{
                    Toast.makeText(this,"We Don't Deliver Here!", Toast.LENGTH_SHORT).show()
                }
            }
        }
    }
    .addOnFailureListener {
        AppLog.e("===========", "Data fail " + it)
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM