Как получить пользовательский объект из облачного пожарного магазина? - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь адаптировать свою базу данных в реальном времени к облачному пожарному хранилищу для приложения чата.Сохраняемый объект принадлежит к классу Message, который я создал.Я хотел бы, чтобы сообщения были документом.

Мой адаптер RecyclerView получал бы их так, используя эту базу данных в реальном времени:

public ChatRecyclerViewAdapter(Context mContext, ArrayList<String> mMessage, ArrayList<String> mAuthor, String mRoomID,DatabaseReference reference) {

    this.mContext = mContext;
    this.mRoomID = mRoomID;

    mDatabaseReference = reference.child(mRoomID+"_messages");
    recentMessages = mDatabaseReference.orderByKey().limitToLast(numberOfRecentMessages);
    recentMessages.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            // Convert data snapshot from Database into a Message Object

            Message message = dataSnapshot.getValue(Message.class);

            // Add it to an arrayList of Messages
            messageList.add(message);

            // Notice Changes
            notifyItemInserted(messageList.size());
        }

Ниже показано, как я начал воссоздавать это с помощью Firestore.Как преобразовать снимок обратно в сообщение в методе onEvent прослушивателя снимков?

public ChatRecyclerViewAdapter(Context mContext, ArrayList<String> mMessage, ArrayList<String> mAuthor, String mRoomID, FirebaseFirestore firestore, CollectionReference reference) {
    this.mContext = mContext;
    this.mRoomID = mRoomID;

        messageList = new ArrayList<>();
        firestore = FirebaseFirestore.getInstance();
        mCollection = firestore.collection(mRoomID + "_messages");
        mCollection.addSnapshotListener(new com.google.firebase.firestore.EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@javax.annotation.Nullable QuerySnapshot queryDocumentSnapshots, @javax.annotation.Nullable FirebaseFirestoreException e) {
                for (DocumentChange documentChange:queryDocumentSnapshots.getDocumentChanges()){
                    switch (documentChange.getType()){
                        case ADDED:
                    }
                }
            }
        });
        mCollection.get();

1 Ответ

0 голосов
/ 15 сентября 2018

Для преобразования вашего документа в класс используйте: -

Message message = documentSnapshot.toObject(Message.class);

Как объяснено здесь: -

DocumentReference docRef = db.collection("cities").document("BJ");
docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
    @Override
    public void onSuccess(DocumentSnapshot documentSnapshot) {
        City city = documentSnapshot.toObject(City.class);
    }
});

Обновление: - Вы можете использовать это в своем коде как: -

firestore = FirebaseFirestore.getInstance(); 
firestore.collection(mRoomID + "_messages")
    .addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable QuerySnapshot snapshots,
                            @Nullable FirebaseFirestoreException e) { 
                for (DocumentChange dc : snapshots.getDocumentChanges()) {
                switch (dc.getType()) {
                    case ADDED:
                            Message message = snapshots.toObject(Message.class);
                        break;     
                }
            }
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...