मैं एक दस्तावेज़ स्नैपशॉट के लिए दस्तावेज़ चेंज ऑब्जेक्ट कैसे प्राप्त कर सकता हूं? मैं अपने कथन के अंदर दस्तावेज़ के परिवर्तन के प्रकार का उपयोग करना चाहता हूं। querySnapshot के साथ यह आसान है, लेकिन मुझे नहीं पता कि एक दस्तावेज़ में परिवर्तनों को सुनने के लिए इसे कैसे प्राप्त किया जाए।

val uid = FirebaseAuth.getInstance().uid
val documentReference = FirebaseFirestore.getInstance().collection("users").document(uid!!)
        documentReference.addSnapshotListener{
            documentSnapshot, e ->
            when (documentSnapshot**what code needs to be here**.type) {
                DocumentChange.Type.ADDED -> {}
                DocumentChange.Type.MODIFIED -> {}
                DocumentChange.Type.REMOVED -> {}
            }
        }

1
Taserface 1 जून 2020, 14:08

1 उत्तर

सबसे बढ़िया उत्तर

किसी एक दस्तावेज़ को सुनते समय आपको DocumentChange.Type नहीं मिलता है। इसके बजाय आपको एक DocumentSnapshot मिलता है जिसमें उस दस्तावेज़ की स्थिति होती है।

आप दस्तावेज़ को देखने और यह ट्रैक रखने से प्राप्त कर सकते हैं कि यह आपके श्रोता के लिए पहला कॉलबैक है या नहीं:

if (snapshot.exists()) {
  if (isFirst) Log.i(TAG, "ADDED")
  else Log.i(TAG, "MODIFIED")
}
else {
  if (isFirst) Log.i(TAG, "NOOP")
  else Log.i(TAG, "REMOVED")
}

या यदि आप शर्तों की एक सपाट सूची पसंद करते हैं:

if ( snapshot.exists() &&  isFirst) Log.i(TAG, "ADDED")
if ( snapshot.exists() && !isFirst) Log.i(TAG, "MODIFIED")
if (!snapshot.exists() &&  isFirst) Log.i(TAG, "NOOP")
if (!snapshot.exists() && !isFirst) Log.i(TAG, "REMOVED")

NOOP एक ऐसा मामला है जो घटना आधारित श्रोताओं में कभी मौजूद नहीं होगा, क्योंकि इसमें उस स्थिति के लिए कोई घटना नहीं होगी।

1
Frank van Puffelen 1 जून 2020, 15:24