java - 无法使用 Push Id Firebase 弹回输入

标签 java android firebase

原因:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“-Jzp5XCUx78BX5D7BvkU

enter image description here

我的 POJO 类

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

public class ChatData {
    String messageId;
    String userName;
    String currentDate;
    String chatType;
    String messageType;
    String currentLocation;


    public ChatData() {

    }

    public ChatData(String messageId, String userName, String currentDate, String chatType, String messageType, String currentLocation) {
        this.messageId = messageId;
        this.userName = userName;
        this.currentDate = currentDate;
        this.chatType = chatType;
        this.messageType = messageType;
        this.currentLocation = currentLocation;
    }

    public String getMessageId() {
        return messageId;
    }

    public String getUserName() {
        return userName;
    }

    public String getCurrentDate() {
        return currentDate;
    }

    public String getChatType() {
        return chatType;
    }

    public String getMessageType() {
        return messageType;
    }

    public String getCurrentLocation() {
        return currentLocation;
    }


}

消息接收端

public static final String CHAT_TYPE_FRIEND = "friend";

和 currentChannel=6ca5c08c-9dd2-4f8f-8475-34a427c2354f

  // User node listener were all the user private messages arriving
    private void listenToUserNode() {

        try {
            Firebase mFirebaseRef = new Firebase(Constants.FIRE_BASE_URL).child(Constants.CHAT_TYPE_FRIEND + File.separator + currentChannel);
            mFirebaseRef.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {


                }

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                    String key = dataSnapshot.getKey();
                    ChatData newMessage = dataSnapshot.getValue(ChatData.class);
                    handleReceivedMessage(currentChannel,newMessage);
                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onCancelled(FirebaseError firebaseError) {

                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

从 firebase onChild 接收数据时遇到错误,因为我的 pojo 与数据匹配,但它会抛出错误,因为没有用于推送 id 的字段

最佳答案

请注意,此答案基于您发布的不完整代码。如果您添加设置 Firebase 引用并针对您的问题调用 getValue() 的代码,将会非常有帮助。

您似乎正在尝试将聊天消息列表读入 ChatData 对象:

Firebase messagesRef = new Firebase("https://yours.firebaseio.com/messages");
messagesRef.addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot snapshot) {
        ChatData data = snapshot.getValue(ChatData.class);
    }
    public void onCancelled(FirebaseError firebaseError) {
    }
}

那是行不通的。

您有两个选择:

循环阅读每条消息

在此代码段中,我们将使用 snapshot.getChildren() 来迭代各个消息。

messagesRef.addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot snapshot) {
        for (DataSnapshot child: snapshot.getChildren()) {
            ChatData data = child.getValue(ChatData.class);
        }
    }
    public void onCancelled(FirebaseError firebaseError) {
    }
}

将所有消息读入 map

或者,我们可以将所有消息读入 map :

messagesRef.addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot snapshot) {
        GenericTypeIndicator<Map<String,ChatData>> chatsType = new GenericTypeIndicator<Map<String,ChatData>>() {};
        Map<String,ChatData> chats = child.getValue(Map<String,ChatData>);
    }
    public void onCancelled(FirebaseError firebaseError) {
    }
}

如果您不关心消息的推送 ID,可以使用 chats.values()。但在这种情况下,您可能需要首先考虑为什么要使用推送 ID 存储消息,而不是使用您自己的 messageId 值。

关于java - 无法使用 Push Id Firebase 弹回输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32718593/

相关文章:

java - 自定义 Eclipse 重构预览中的错误

java - 识别对象实现的接口(interface)列表

android - 设置与 System.currentTimeMillis() 的时间差

firebase - 火存储 : How to query a map of roles inside a subcollection of documents?

node.js - Firebase 在 Nodejs 中处理事务

javascript - 获取下载 URL 并使其可供其他组件使用

java - 如何强制Java动态方法调用绑定(bind)

java - Eclipse 无法识别 JVM 1.8

android - 没有google账号怎么安装条码扫描库?

android-support-v7-appcompat 项目未在 Eclipse 中导入