【问题标题】:Cant parse DataSnapshot from Firebase into java Class无法将 Firebase 中的 DataSnapshot 解析为 java 类
【发布时间】:2017-06-26 04:25:46
【问题描述】:

我在尝试将快照从 firebase 转换为 Event 类时遇到了这个问题。 Event 对象(evento var)已创建,但其属性全部为空。

FirebaseDatabase.getInstance().getReference("events")
                .orderByChild("event_name").equalTo(event_name)
                .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot snapshot) {
                        Event evento = snapshot.getValue(Event.class);
                        for (Task task:
                             evento.getTasks()) {
                            Log.d("Task name:",task.getName());
                        }


                    }

                    @Override
                    public void onCancelled(DatabaseError error) {
                    }
                });

这是事件类

public class Event {
    private String event_name;
    private List<Task> tasks;

    public Event(String event_name, LinkedList<Task> tasks) {
        this.event_name = event_name;
        this.tasks = tasks;
    }

    public Event() {
    }

    public String getEvent_name() {
        return event_name;
    }

    public void setEvent_name(String event_name) {
        this.event_name = event_name;
    }

    public List<Task> getTasks() {
        return tasks;
    }

    public void setTasks(List<Task> tasks) {
        this.tasks = tasks;
    }

}

这是Task类,以防万一

public class Task {
    private String name;
    private Boolean state;
    private String description;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Boolean getState() {
        return state;
    }

    public void setState(Boolean state) {
        this.state = state;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Task(String name, Boolean state, String description) {
        this.name = name;
        this.state = state;
        this.description = description;
    }
    public Task(){

    }
}

【问题讨论】:

  • 您能否更新问题以显示 Firebase 数据库中 events 节点的结构?
  • 也感谢帕特!我正要上传节点结构时弗兰克回答并解决了问题

标签: android firebase firebase-realtime-database


【解决方案1】:

如果不知道 JSON(正如 Pat 在评论中所问的那样),就无法确定。但最有可能的是,您在错误的位置转换了类型。

当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。因此,您的代码需要遍历结果以获取每个匹配事件。

FirebaseDatabase.getInstance().getReference("events")
            .orderByChild("event_name").equalTo(event_name)
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot snapshot) {
                    for (DataSnapshot eventSnapshot: snapshot.getChildren()) {
                        Event event = eventSnapshot.getValue(Event.class);
                        Log.d(event.getEvent_name());
                        for (Task task: event.getTasks()) {
                            Log.d("Task name:",task.getName());
                        }
                    }
                }

                @Override
                public void onCancelled(DatabaseError error) {
                    throw error.toException(); // don't ignore errors
                }
            });

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多