Firebase firestore文档更改

时间:2018-06-08 06:47:17

标签: firebase google-cloud-firestore

我只是想问一下如何在我的应用中正确使用文档更改?顺便说一下,有三种类型的添加,修改和最后删除。 TYPE.ADDED工作得很好,但在修改和删除它不能很好地修改它。我正在使用recyclerview,这是我的代码。我错了吗?此外,我使用实例oldindex和newindex来了解受执行操作影响的索引。

for (DocumentChange doc : documentSnapshots.getDocumentChanges()) {
    if(doc.getType() == DocumentChange.Type.ADDED) {
        PostsClass post = doc.getDocument().toObject(PostsClass.class).withId(doc.getDocument().getId());
        postList.add(post);
        Log.d(TAG, post.toString());
        postsAdapter.notifyDataSetChanged();
    }
    else if (doc.getType() == DocumentChange.Type.MODIFIED) {
        adoptList.clear();
        AdoptClass adopt = doc.getDocument().toObject(AdoptClass.class).withId(doc.getDocument().getId());
        adoptList.add(adopt);
        adoptListAdapter.notifyItemChanged(oldIndex);
    }
    else  if (doc.getType() == DocumentChange.Type.REMOVED) {
        adoptList.remove(oldIndex);
        adoptListAdapter.notifyItemRemoved(oldIndex);
    }
}

1 个答案:

答案 0 :(得分:2)

以下代码在3个条件下为我工作了ADDED,MODIFIED,REMOVED(Android Firestore)

 for (DocumentChange documentChange : queryDocumentSnapshots.getDocumentChanges()) {
                    if (documentChange.getType() == DocumentChange.Type.ADDED) {

                        String doc_id = documentChange.getDocument().getId();
                        PostModel postModel = documentChange.getDocument().toObject(PostModel.class).withDocId(doc_id);
                        postModelList.add(postModel);

                    } else if (documentChange.getType() == DocumentChange.Type.MODIFIED) {

                         // modifying

                        String docID = documentChange.getDocument().getId();
                        PostModel changedModel = documentChange.getDocument().toObject(PostModel.class).withDocId(docID);
                        if (documentChange.getOldIndex() == documentChange.getNewIndex()) {
                            // Item changed but remained in same position
                            postModelList.set(documentChange.getOldIndex(),changedModel);
                            postListAdapter.notifyItemChanged(documentChange.getOldIndex());
                        }else {
                            // Item changed and changed position
                            postModelList.remove(documentChange.getOldIndex());
                            postModelList.add(documentChange.getNewIndex(),changedModel);
                            postListAdapter.notifyItemMoved(documentChange.getOldIndex(),documentChange.getNewIndex());
                        }

                        postListAdapter.notifyDataSetChanged();
                    } else if (documentChange.getType() == DocumentChange.Type.REMOVED) {

                        // remove
                        postModelList.remove(documentChange.getOldIndex());
                        postListAdapter.notifyItemRemoved(documentChange.getOldIndex());
                    }


                }