मैं कोटलिन और फायरबेस के साथ एक एंड्रॉइड देशी एप्लिकेशन विकसित कर रहा हूं, मेरे पास विषय नाम का एक संग्रह है और उपयोगकर्ता के लिए टाइप संदर्भ के 2 फ़ील्ड हैं और दूसरा श्रेणी के लिए है, मैं संदर्भ दस्तावेज़ के साथ सभी दस्तावेज़ भी प्राप्त करने का प्रयास कर रहा था, लेकिन ऐसा नहीं है काम करने लगते हैं:

db.collection("topic").get().addOnSuccessListener { result ->
        for (document in result) {
            Log.e("success", "${document.id} => ${document.data.get("subject")}")
            var topic: Topic = Topic(
                document.id as String,
                document.data.get("subject") as String,
                document.data.get("content") as String,
                document.data.get("created_at") as String,
                document.getDocumentReference("Category") as Category,
                document.getDocumentReference("User") as User
            )}

कोई त्रुटि नहीं, लेकिन मेरे प्रिंट (विषय) में कोई परिणाम नहीं।

यह है टॉपिक क्लास

class Topic : Serializable {
    var id : String = ""
    var subject : String = ""
    var content : String = ""
    var created_at : String = ""
    var cat = Category()
    var user = User()

    constructor(){}

    constructor(
        id: String,
        subject: String,
        content: String,
        created_at: String,
        cat: Category,
        user: User
    ) {
        this.id = id
        this.subject = subject
        this.content = content
        this.created_at = created_at
        this.cat = cat
        this.user = user
    }

    override fun toString(): String {
        return "Topic(id='$id', subject='$subject', content='$content', created_at='$created_at', cat=$cat, user=$user)"
    }
}

Database

2
CHARFEDDINE Amine 31 अक्टूबर 2019, 13:14
कृपया अपनी डेटाबेस संरचना को स्क्रीनशॉट और अपनी Topic कक्षा की सामग्री के रूप में जोड़ें।
 – 
Alex Mamo
31 अक्टूबर 2019, 13:21
हाय, क्षमा करें, मुझे यह प्रदान करना चाहिए था, मैंने कक्षा और डेटाबेस संरचना को जोड़ा।
 – 
CHARFEDDINE Amine
31 अक्टूबर 2019, 13:34

2 जवाब

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

आपको प्रत्येक संदर्भित दस्तावेज़ को एक अलग get() कॉल के साथ स्पष्ट रूप से प्राप्त करना होगा। आपके वर्तमान कॉल में उन्हें स्वचालित रूप से प्राप्त करने का कोई तरीका नहीं है।

तो कुछ ऐसा:

db.collection("topic").get().addOnSuccessListener { result ->
    for (document in result) {
        document.getDocumentReference("Category").get().addOnSuccessListener { categoryDoc ->
            let category = categoryDoc.data as Category
            ...
        }
    }
}

और देखें:

1
Frank van Puffelen 31 अक्टूबर 2019, 13:47
आपकी प्रतिक्रिया के लिए @Frank van Puffelen और विशेष रूप से आपके कोड के लिए धन्यवाद जो बताता है कि मुझे वास्तव में क्या करना चाहिए।
 – 
CHARFEDDINE Amine
31 अक्टूबर 2019, 14:59

जब आप कोड की निम्न पंक्ति का उपयोग कर रहे हों:

document.getDocumentReference("Category") as Category

आपको DocumentReference प्रकार की वस्तु मिल रही है और Category प्रकार की वस्तु नहीं क्योंकि DocumentSnapshot की getDocumentReference() विधि उस प्रकार की वस्तु लौटाती है। याद रखें कि कोटलिन में, DocumentReference प्रकार की किसी वस्तु को Category पर डालने का कोई तरीका नहीं है, इसलिए वह व्यवहार।

तो यह धारणा कि केवल किसी वस्तु का संदर्भ प्राप्त करने से वस्तु स्वयं वापस आ जाएगी नहीं सही है। एकमात्र तरीका जिससे आप इसे हल कर सकते हैं, उनमें से प्रत्येक के लिए अलग-अलग कॉल करना है, जैसा कि @FrankvanPuffelen ने अपने उत्तर में उल्लेख किया है।

एक अलग विषय के रूप में, आप नीचे दिए गए पोस्ट से मेरे उत्तर पर एक नज़र डाल सकते हैं, जैसा कि मैंने देखा कि आप दस्तावेज़ में गुणों के लिए अलग-अलग नामकरण का उपयोग कर रहे हैं:

1
Alex Mamo 31 अक्टूबर 2019, 14:57
मैं आपके उत्तर @Alex Mamo के लिए धन्यवाद देता हूं, इससे मुझे DocumentReference की अवधारणा को समझने में मदद मिली।
 – 
CHARFEDDINE Amine
31 अक्टूबर 2019, 14:51
आपका बहुत-बहुत स्वागत है शारफेडिन! मेरा उत्तर यह @FrankvanPuffelen के उत्तर के अतिरिक्त है।
 – 
Alex Mamo
31 अक्टूबर 2019, 14:52