当前位置: 首页 > 知识库问答 >
问题:

如何从云端恢复中检索自定义对象?

秦景福
2023-03-14

我正在尝试将我的实时数据库调整为一个聊天应用程序的云firestore。存储的对象是我创建的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重新创建它的。如何在快照侦听器的OneEvent方法中将快照转换回消息

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个答案

轩辕经国
2023-03-14

要将文档转换为类,请使用:-

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;     
                }
            }
            }
        });
 类似资料:
  • 问题内容: 我刚刚在Google App Engine Java应用程序上创建了自己的自定义身份验证。麻烦不如我想做的下一件事。 身份验证工作正常,但是现在我尝试向默认的User对象添加一些其他字段,这样我就不必对服务器进行太多调用。 因此,到目前为止,我已经创建了一个实现Authenticator的自定义类。根据用户是否通过身份验证,authenticate方法返回User对象或null。然后,

  • Hy Guys我试图做的是从Firestore数据库中检索2个收集文档,并将其显示到我的代码中: 这允许我从特定用户检索数据,但我有另一个名为“shippingAddress”的表单,它创建了如下集合: 然后我必须检索上面的集合,但我不知道如何...因为在同一屏幕中,我检索“用户”集合以仅显示来自特定用户的数据,并且我还需要检索“shippingAddress”集合,因为在此类集合中还有其他要显示

  • 问题内容: 我在Playground中使用Swift 3,Xcode 8.0拥有此功能: 创建人员数组 编码数组 保存到用户默认值 检查 从userDefaults返回 只需检查存档的数据 我无法正确将数据对象保存到userDefaults,此外,底部的检查还会产生错误“严重错误:在展开可选值时意外发现nil”。“检查”行还显示已保存的对象为nil。这是我对象的NSCoder中的错误吗? 问题答案

  • 我试图从Firebase Firestore中检索一个字段,并将其放入一个自定义对象中。我成功地从代码上传了自定义对象,没有任何问题,但是当我试图从Firestore读取和访问对象列表时,我一直得到以下错误: SelfMadeQuestion类如下所示: 这就是我试图做的,以便从Firebase中读取自拍问题列表: 由于可以将自定义对象上载到firebase并且工作正常,我想知道是否有任何方法可以

  • 我很难从自定义对象的ArrayList中删除重复项。 删除重复项 自定义对象等于() 删除重复项后的输出 关于为什么它实际上没有删除重复项,有什么提示吗?或者它实际上是通过将副本替换为原始副本来删除副本?不知道这里发生了什么。

  • 我试图使用庞大的Node.js包将文件从Docx转换为HTML。庞大的自述文件建议使用以下格式转换文件: 在函数中的任何位置放置语句将不允许我使用存储的html,但是我可以将正确的html内容输出到控制台。我需要关于如何返回/使用promise之外的html变量的建议,谢谢。