J'ai la structure de données ci-dessus stockée dans Cloud Firestore. Je veux enregistrer le dungeon_group
qui est un tableau de chaînes stockées dans Firestore.
J'ai du mal à obtenir les données et à les stocker sous forme de tableau. Je suis juste capable d'obtenir une chaîne étrange mais une méthode pour stocker en tant que tableau de chaînes? Voici le code que j'ai utilisé.
Je suis en mesure d'y parvenir dans Swift comme suit, mais je ne sais pas comment faire de même dans Android.
//Rapide
Firestore.firestore().collection("dungeon").document("room_en").getDocument { (document, error) in
if let document = document {
let group_array = document["dungeon_group"] as? Array ?? [""]
print(group_array)
}
}
// Java Android
FirebaseFirestore.getInstance().collection("dungeon").document("room_en").get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
DocumentSnapshot document = task.getResult();
String group_string= document.getData().toString();
String[] group_array = ????
Log.d("myTag", group_string);
}
});
Sortie de la console comme suit: {dungeon_group = [3P, Urgent, Mission Challenge, Descended, Collaboration, Daily, Technical, Normal]}
Puisque votre document ressemble à ceci "dongeon_group=[SP, urgent, missinon challenge,...]
Lorsque vous le convertissez en chaîne, dites via String.valueOf(document.getData())
Je pense qu'une autre façon d'y parvenir est de déballer le document immédiatement dans une chaîne de tableau comme suit:
String[] unpackedDoc = document.getData().entrySet().toArray()[0].toString().split("=")[1].split(",");
Explication
Le document
est obtenu à partir de documentSnapshot.getDocuments()
qui retourne une liste contenant vos documents.
Étant donné que vos documents, depuis le magasin de secours, semblent imbriqués, appeler la fonction document.getData()
renverra la liste, une liste avec un seul élément bien sûr, de votre document. document.getData().entrySet()
rendra le document prêt à être converti en tableau (vous ne pouvez pas le faire avec getData () seul) contenant également un seul élément. Accéder à l'élément unique document.getData().entrySet().toArray()[0]
puis le convertir en chaîne, document.getData().entrySet().toArray()[0].toString()
laissera une chaîne que vous pourrez ensuite fractionner (en utilisant le =
Trouvé dans la chaîne) et puis prenez la deuxième partie. La deuxième partie peut également être divisée en un tableau contenant les valeurs de votre document.
Comme cette solution convertit un élément à la fois, vous pouvez l'envelopper dans une boucle afin de convertir tous les documents disponibles.
Par exemple:
for(DocumentSnapshot document :documentSnapshot.getDocuments()){ String[] unpackedDoc = document.getData().entrySet().toArray()[0].toString().split("=")[1].split(","); //do something with the unpacked doc
}