我正在开发Android Chat项目,我有一个ListView,我希望通过Firebase列表适配器填充messeges。现在,在我运行代码之后,应用程序崩溃了。
我尝试了几种方法来解决它但没有成功。 我的观念是错误的,我应该使用不同的方法吗? 无论如何 -
例外是:
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"
}
感谢您的帮助!
答案 0 :(得分:0)
首先,我发现我需要像这样连接到Firebase数据库:
mFirebaseRef = new Firebase("https://<stack-overflow>.firebaseio.com/mychat");
第二,为了解决Jackson问题(以下划线开头的名字),在@Frank van Puffelen的帮助下,我发现我需要在MainActivity中将ChatMessage
类设为静态并删除setter / getters。 / p>
或的
我可以在我的变量声明和@JsonProperty
类中的getter之前添加ChatMessage
。