Firestore: после получения данных из firestore и получения значений из объекта и добавления их в просмотр списка - PullRequest
0 голосов
/ 04 мая 2018

У меня есть структура данных объекта, как показано ниже:

enter image description here

Это код, который я получил данные документа:

DocumentReference docRef = db.collection("deyaPayUsers").document(mAuth.getUid()).collection("Split").document(mAuth.getUid()).collection("SentInvitations").document(documentId);
        docRef.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());

                        Object value = document.getData();// Here I added the data to the object type value 
                        System.out.println("values"+ value);


                        } else {
                        Log.d(TAG, "No such document");
                    }
                } else {
                    Log.d(TAG, "get failed with ", task.getException());
                }
            }
        });

Я получил эти данные из базы данных Firestore. Теперь мне нужно количество, номер телефона и статус во всех приглашениях (1,2) и добавить в список. Я не могу получить эти поля первыми. После этого мне нужно добавить их в список. А также всякий раз, когда пользователь обновляет поле Status, тогда listview также должно обновляться.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Предполагая, что ваша docRef DocumentReference правильная, чтобы получить значения свойств Amount, PhoneNumber и Status, измените следующие строки кода:

Object value = document.getData();// Here I added the data to the object type value 
System.out.println("values"+ value);

до

String amount = document.getString("Amount");
String phoneNumber = document.getString("PhoneNumber");
String status = document.getString("Status");
System.out.println(amount + " / " + phoneNumber + " / " + status);

Предположим, вы хотите получить значения свойств для ваших документов Пригласить1, вывод будет:

10 / 9876543210 / Pending

Редактировать: Согласно вашему комментарию, я понимаю, что вы хотите получить значения этих свойств из всех документов, но в своем коде вы используете следующую ссылку, которая указывает на один документ, а не на всю коллекцию.

DocumentReference docRef = db
    .collection("deyaPayUsers")
    .document(mAuth.getUid())
    .collection("Split")
    .document(mAuth.getUid())
    .collection("SentInvitations")
    .document(documentId); //Reference to a document

Видите, последний вызванный метод - .document(documentId)? Чтобы получить все документы, вам необходимо использовать CollectionReference. Поэтому, пожалуйста, используйте следующий код:

DocumentReference docRef = db
    .collection("deyaPayUsers")
    .document(mAuth.getUid())
    .collection("Split")
    .document(mAuth.getUid())
    .collection("SentInvitations").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                Map<String, Object> map = document.getData();
                String amount = map.get("Amount").toString();
                String phoneNumber = map.get("PhoneNumber").toString();
                String status = map.get("Status").toString();
                System.out.println(amount + " / " + phoneNumber + " / " + status);
            }
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});

Вывод будет:

10 / 9876543210 / Pending
20 / 1234566789 / Pending

Edit2:

docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                Map<String, Object> map = document.getData();
                for (Map.Entry<String, Object> entry : map.entrySet()) {
                    Map<String, Object> m = (Map<String, Object>) entry.getValue();
                    StringBuilder s = new StringBuilder();
                    for (Map.Entry<String, Object> e : m.entrySet()) {
                        s.append(e.getValue() + " ");
                    }
                    Log.d(TAG, s.toString());
                }
            }
        }
    }
});

Вывод будет:

10 9876543210 Pending
20 1234566789 Pending
//And so on
0 голосов
/ 04 мая 2018

Вы можете достичь выше, как показано ниже, и согласно вашим комментариям у вас есть идентификатор документа, тогда

Invite invite = document.toObject(Invite.class).withId(document.getId());

public class Invite {

    private int amount;
    private String phoneNumber;
    private String status;


    public int getAmount() {
        return amount;
    }

    public void setAmount(int amount) {
        this.amount = amount;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...