Как получить список строк внутри документа Firestore - PullRequest
0 голосов
/ 17 ноября 2018

Я сохранил список строк внутри документа. Я дал ему имя («имя»), теперь я пытаюсь получить его на стороне клиента, но не знаю, как это сделать точно.я могу видеть, что если мое поле имеет номер типа, я могу использовать getLong("Fieldname"), но я не могу понять, как вернуть список типа Strings.Мой код до сих пор

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());
  }
   });

Ответы [ 3 ]

0 голосов
/ 18 ноября 2018

Я использовал код, предоставленный @Frank van, и использовал эту функцию, чтобы привести мой Объект к списку Строк

 @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);
0 голосов
/ 18 ноября 2018

Вы можете проверить этот пост с вопросом, который я разместил ранее. Вы можете перейти из ArrayAdapter, который я использовал, в список

AutoCompleteTextПросмотреть данные из Firestore

Надеюсь, это поможет вам.

0 голосов
/ 18 ноября 2018

Поскольку вы храните названия брендов в одном документе, я сомневаюсь, что QuerySnapshot - правильный класс для возврата. Насколько я вижу, вы захотите использовать getData(), чтобы получить Map<String, Object>, который Firestore использует для вашего List:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...