上記のデータ構造をCloud Firestoreに保存しています。保存したいdungeon_group
は、Firestoreに保存されている文字列の配列です。
データを取得して配列として保存するのが難しい。私は奇妙な文字列を取得できますが、文字列配列として格納する方法はありますか?以下は私が使用したコードです。
私はSwiftで以下のようにこれを達成できますが、Androidで同じことを行う方法がわかりません。
//迅速
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);
}
});
次のようにコンソールOutPut:{dungeon_group = [3P、Urgent、Mission Challenge、Descended、Collaboration、Daily、Technical、Normal]}
あなたのドキュメントはこのように見えますので、それを文字列に変換すると_"dongeon_group=[SP, urgent, missinon challenge,...]
_、例えばString.valueOf(document.getData())
で
これを簡単に実現する別の方法は、次のようにドキュメントを配列の文字列にすぐにアンパックすることです。
String[] unpackedDoc = document.getData().entrySet().toArray()[0].toString().split("=")[1].split(",");
説明
document
はdocumentSnapshot.getDocuments()
から取得され、ドキュメントを含むリストを返します。
ファイアストアからのドキュメントはネストされているように見えるので、document.getData()
を呼び出すと、ドキュメントのリスト(もちろん単一の要素を含むリスト)が返されます。 document.getData().entrySet()
は、ドキュメントを配列に変換する準備をします(getData()だけではできません)単一の要素も含みます。単一の要素document.getData().entrySet().toArray()[0]
にアクセスし、それを文字列に変換すると、document.getData().entrySet().toArray()[0].toString()
は文字列を残します。この文字列は(文字列にある_=
_を使用して)分割できます。第二部を取る。 2番目の部分は、ドキュメントの値を含む配列に分割することもできます。
このソリューションは一度に1つの要素を変換するため、ループ内でラップして、利用可能なすべてのドキュメントを変換できます。
例えば:
for(DocumentSnapshot document :documentSnapshot.getDocuments()){ String[] unpackedDoc = document.getData().entrySet().toArray()[0].toString().split("=")[1].split(","); //do something with the unpacked doc
_}
_