我正在尝试构建一个简单的聊天应用程序。我是 Firebase 的新手。数据库的结构是这样的:
这是我的代码:
databaseReference = FirebaseDatabase.getInstance().getReference().child("Chat");
firebaseListAdapter = new FirebaseListAdapter<Room>(this, Room.class, android.R.layout.simple_list_item_1, databaseReference) {
@Override
protected void populateView(View v, Room room, int position) {
TextView textView = (TextView) v.findViewById(android.R.id.text1);
String roomName = this.getRef(position).getKey();
textView.setText(roomName);
}
};
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(firebaseListAdapter);
这是我的房间类:
class Room {
private String room;
public Room() {}
public Room(String room) {this.room = room;}
public void setRoom(String room) {this.room = room;}
public String getRoom() {return room;}
}
当我尝试填充 ListView 时,项目会正确显示,但尽管我已经设置了 getter 和 setter,但每次我启动 Activity 时,我都会收到此错误 12 次:
W/ClassMapper: No setter/field for -KZcHa8wYpcvLSb7atX- found on class example.com.chat.Room
我该如何解决这个问题?提前致谢!
最佳答案
使用该数据库结构,您无法摆脱这些警告,因为 FirebaseListAdapter
会自动尝试将 firebase 的响应解析为对象类。
你有两个选择:
- 改变数据库结构
- 不要使用
FirebaseListAdapter
,而是使用ChildEventListener
,然后手动将值添加到ListView
如果要改变数据库结构,可以改成这样
{
"Chat": {
"Room1": {
...
},
"Room2": {
...
},
"Room3": {
...
}
},
"Chat_Rooms": {
"Room1": true,
"Room2": true,
"Room3": true
}
}
然后将 DatabaseReference
引用到“Chat_Rooms”
databaseReference = FirebaseDatabase.getInstance().getReference().child("Chat_Rooms");
firebaseListAdapter = new FirebaseListAdapter<Boolean>(this, Boolean.class, android.R.layout.simple_list_item_1, databaseReference) {
@Override
protected void populateView(View v, Boolean value, int position) {
TextView textView = (TextView) v.findViewById(android.R.id.text1);
String roomName = this.getRef(position).getKey();
textView.setText(roomName);
}
};
关于android - 带类映射器 : No setter/field when using FirebaseListAdapter in Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41293087/