android - 带类映射器 : No setter/field when using FirebaseListAdapter in Java

标签 android firebase firebase-realtime-database

我正在尝试构建一个简单的聊天应用程序。我是 Firebase 的新手。数据库的结构是这样的:

enter image description here

这是我的代码:

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/

相关文章:

javascript - Firebase 未在 iOS Ionic 上初始化

android - 重复的 FCM 推送通知

java - 相当于 Android 的 getch()

java - 如何从对象列表中提取元素并将其存储在字符串数组中

java - 安卓长触事件

java - 从 Firebase 中的另一个键附加属性

ios - 在 Firebase 中更新值后更新 TableView

swift - 如何在我的 firebase 数据库中构建我的 Geofire 帖子

reactjs - React + Firebase 使用钩子(Hook)?

android - 从 NFC 安装 GooglePlay 定位的应用程序