如何从文档Firestore内部获取字符串列表



我在文档中存储了一个字符串列表。我给它起了一个名称("name"(,现在我正试图在客户端获取它,但不知道如何准确地执行。我可以看到,如果我的字段类型为number,我可以使用getLong("Fieldname"),但我无法弄清楚如何返回字符串类型的列表。到目前为止我的代码

FirebaseFirestore getlistofbrands=FirebaseFirestore.getInstance();
getlistofbrands.collection(FireStoreConstants.COL_BRANDNAMESONLY).document("Brands").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
List<String> listofbrandsfromfirestore=queryDocumentSnapshots.getDocuments().toArray(String.class);

也试过这个

List<String> listofbrandsfromfirestore=queryDocumentSnapshots.toObjects(String.class);

我是如何上传数据的

Map < String, Object > docData = new HashMap < > ();
List < String > deviceNameList = new ArrayList < String > ();
deviceNameList.add("brand1");
deviceNameList.add("brand2");
deviceNameList.add("brand3");
deviceNameList.add("brand4");
docData.put("name", deviceNameList);
firebaseFirestore.collection("FireStoreConstants.COL_BRANDNAMESONLY")
.document("Brands").set(docData).addOnSuccessListener(new 
OnSuccessListener < Void > () {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "Repository:onSuccess:");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "Repository:error" + e.toString());
}
});

由于您将品牌名称存储在单个文档中,我怀疑QuerySnapshot是否是返回的正确类。据我所见,您将希望使用getData()来获得Firestore用于List:的Map<String, Object>

getlistofbrands
.collection(FireStoreConstants.COL_BRANDNAMESONLY)
.document("Brands")
.get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Log.d(TAG, "DocumentSnapshot data: " + document.getData());
Map<String, String> brandsMap = (Map<String, String>)documen.getData().getData("AllBrands");
List<String> brands = new LinkedList<String>();
for (String key: brandsMap.keySet()) {
brands.add(brandsMap.get(key));
}
// TODO: use the brands list
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});

你可能还想试试:

List<String> brands = brandsMap.value();

我使用@Frank van提供的代码,并使用此函数将我的Object强制转换为字符串列表

@SuppressWarnings("unchecked")
public static <T extends List<?>> T cast(Object obj) {
return (T) obj;
}
Object brandsobj = queryDocumentSnapshots.getData().get("AllBrands");
List<String> allbrands = cast(brandsobj);

您可以查看我之前发布的这篇问题帖子。您可以将我使用的ArrayAdapter更改为List

自动完成文本查看来自Firestore 的数据

希望它能帮助你。

最新更新