java - 我应该如何在 Firebase 实时数据库中设置键值类型的 getter 和 setter?
问题描述
我有这个 Firebase 实时数据库
当我想显示它时出现错误:
com.google.firebase.database.DatabaseException:无法将 java.util.ArrayList 类型的值转换为字符串
"players"
在数据库中没有子项的情况下显示工作正常。错误MyEvents.java
在这一行event = ds.getValue(Event.class);
中。这是我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
孩子创建单独的班级?
解决方案
在您的数据库中,players
字段是 a list
,而不是 a String
。所以,你应该像这样在你的模型类
中声明players
为一个列表:
然后在你的构造函数中替换它。然后用以下代码替换 getter 和 setter:Event.java
public List<String> players;
public List<String> getPlayers() {
return players;
}
public void setPlayers(List<String> players) {
this.players = players;
}
或者,最好让 Android Studio 自动生成构造函数、getter 和 setter。
推荐阅读
- java - 添加多个服务时 Springboot 集成测试失败
- python - 设计模式(构建器)/属性错误
- c# - 当物体的 y 或 z 在 Unity 中发生变化时,Atan2 给出了假角
- scala - 如何将 ByteBuffer 转换为 blob 以进行 cassandra 插入?
- python - 如何使用列表理解技术获得所需的结果列表?
- amp-html - 如何调试为什么不呈现 amp-img?
- html - 当孩子有上述项目时,如何让孩子尊重父母
- javascript - 如何通过组件反应原生的样式传递道具?
- python - 与 twitch bot 一起运行 discord bot
- firebase - 使用给定列表的每个元素查询 Firestore 后的 NULL 文档列表