【问题标题】:Failed to bounce to type with FirebaseListadAdpter使用 FirebaseListadAdpter 弹跳输入失败
【发布时间】:2016-08-10 23:16:14
【问题描述】:

我正在开发 Android 聊天项目,并且我有一个 ListView,我希望消息通过 Firebase 列表适配器填充。现在,在我运行代码后,应用程序崩溃了。

我尝试了几种方法来解决它,但都没有成功。 我的概念是错误的,我应该使用不同的方法吗? 反正-

例外是:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.example.giat.myapplication.ChatMessage] from String value; no single-String constructor/factory method

这是 MainActivity.java 中的主要代码:

    Firebase.setAndroidContext(this);
    mFirebaseRef = new Firebase("https://chat-as31da.firebaseio.com");

    Button sendBtn = (Button) findViewById(R.id.button);
    final EditText MessageTxt = (EditText) findViewById(R.id.edit_message);
 sendBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String text =MessageTxt.getText().toString();
            ChatMessage message = new ChatMessage("Android User", text);
            mFirebaseRef.push().setValue(message);
            MessageTxt.setText("");

        }
    });

    final ListView listView = (ListView) this.findViewById(android.R.id.list);
    mListAdapter = new FirebaseListAdapter<ChatMessage>(this,ChatMessage.class,android.R.layout.two_line_list_item,mFirebaseRef) {
        @Override
        protected void populateView(View v, ChatMessage model, int position) {
            ((TextView)v.findViewById(android.R.id.text1)).setText(model.get_name());
            ((TextView)v.findViewById(android.R.id.text2)).setText(model.get_messag());
        }
    };
    listView.setAdapter(mListAdapter);


}

这就是 POJO:

public class ChatMessage {

private String _name;
private String _message;

public ChatMessage() {}

public ChatMessage(String _name,String _message ) {
    this._name = _name;
    this._message = _message;
 }

public String get_name() {
    return _name;
 }

public String get_message() {
    return _message;
  }
}

JASON 数据片段:

{
"_message" : "hi there",
"_name" : "sam"
}

感谢您的帮助!

【问题讨论】:

  • 您能否在mFirebaseRef 显示 JSON 的 sn-p(请作为文本,没有图像)?
  • 我添加了 JSON 的 sn-p 并在 MainActivity.java 处编辑连接。感谢您的帮助! :)
  • 我认为以下划线开头的名称可能会给杰克逊带来问题。试试这个最简单的类:public class ChatMessage { public String _name; public String _message; }(所以没有 getter/setter)。
  • 我删除了 members:_name 和 _message 中的下划线,所以现在我有这个异常: 原因:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "_name" (class com. example.giat.myapplication.ChatMessage),未标记为可忽略(2 个已知属性:、“messag”、“name”])
  • 我只注意到它现在发送旧值:' "-KOKvoarUcjyrz71L88q" : { "_messag" : "gi", "_name" : "Android User", "messag" : "gi", "name" : "Android 用户" } '

标签: android firebase firebase-realtime-database firebaseui


【解决方案1】:

首先,我发现我需要像这样连接到 Firebase 数据库:

        mFirebaseRef = new Firebase("https://<stack-overflow>.firebaseio.com/mychat");

其次,为了解决杰克逊问题(名称以下划线开头),在@Frank van Puffelen 的帮助下,我发现我需要在 MainActivity 中将 ChatMessage 类设为静态并删除 setter/getter。

或者

我可以在我的变量声明和ChatMessage 类中的getter 之前添加@JsonProperty

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多