【问题标题】:How should I set up getter and setter which is key - value type in Firebase Realtime Database?我应该如何在 Firebase 实时数据库中设置作为键值类型的 getter 和 setter?
【发布时间】:2020-04-08 20:26:51
【问题描述】:

我有这个 Firebase 实时数据库

当我想显示它时出现错误:

com.google.firebase.database.DatabaseException:无法将 java.util.ArrayList 类型的值转换为字符串

如果数据库中没有 "players" 子项,则显示效果很好。错误在此行event = ds.getValue(Event.class); 中的MyEvents.java 类中。 这是我的 Event.java 类,带有 getter、setter 和构造函数

package com.example.vilniausfutbolas;

import com.google.firebase.database.IgnoreExtraProperties;

@IgnoreExtraProperties
public class Event {

    public String team_name;
    public String date;
    public String time;
    public String location;
    public Integer quantity;
    public Double price;
    public String additional;
    public String players;
    public String refused_players;
    public String event_id;

    public Event() {
        // Default constructor required for calls to DataSnapshot.getValue(Event.class)
    }

    public Event(String userId, String team_name, String date, String time, String location, Integer quantity, Double price, String additional, String players, String refused_players, String event_id) {

        this.team_name = team_name;
        this.date = date;
        this.time = time;
        this.location = location;
        this.quantity = quantity;
        this.price = price;
        this.additional = additional;
        this.players = players;
        this.refused_players = refused_players;
        this.event_id = event_id;
    }


    public String getTeam_name() {
        return team_name;
    }

    public void setTeam_name(String team_name) {
        this.team_name = team_name;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public Integer getQuantity() {
        return quantity;
    }

    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public String getAdditional() {
        return additional;
    }

    public void setAdditional(String additional) {
        this.additional = additional;
    }

    public String getPlayers() {
        return players;
    }

    public void setPlayers(String players) {
        this.players = players;
    }

    public String getRefused_players() {
        return refused_players;
    }

    public void setRefused_players(String refused_players) {
        this.refused_players = refused_players;    }

    public String getEvent_id() {
        return event_id;
    }

    public void setEvent_id(String event_id) {
        this.event_id = event_id;
    }
}

所以我想问题是由于错误而正确设置players getter 和 setter。或者也许还有其他方法可以处理players 子对象,我可以在一个对象中显示event,并使用Event.java 类的一个构造函数?

也许我应该为players 孩子创建单独的课程?

【问题讨论】:

  • 您将数据作为列表存储在数据库中,但您正尝试将其作为列表访问。我建议将播放器转换为 List 数据类型

标签: java android arraylist firebase-realtime-database getter-setter


【解决方案1】:

在您的数据库中,players 字段是 list,而不是 String。因此,您应该在 Event.java 模型类中将 players 声明为一个列表,如下所示: public List<String> players;
然后在您的构造函数中替换相同的内容。然后用这段代码替换getter和setter:

public List<String> getPlayers() {
   return players;
}

public void setPlayers(List<String> players) {
    this.players = players;
}

或者,最好让 Android Studio 自动生成构造函数、getter 和 setter。

【讨论】:

  • 问题是我尝试更改与您的解决方案相同的数据类型,但出现另一个错误,我不明白为什么它不成功,因为现在它可以工作了。我可能跳过了一些东西。谢谢!
  • @MantasKildišis 尽管以上答案解决了您的问题,但我建议您阅读这篇文章:Best Practices: Arrays in Firebase。在 Firebase 实时数据库中,建议使用 Map 而不是 List
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多