我应该如何在 Firebase 实时数据库中设置作为键值类型的 getter 和 setter?
Posted
技术标签:
【中文标题】我应该如何在 Firebase 实时数据库中设置作为键值类型的 getter 和 setter?【英文标题】:How should I set up getter and setter which is key - value type in Firebase Realtime Database? 【发布时间】: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在您的数据库中,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
。以上是关于我应该如何在 Firebase 实时数据库中设置作为键值类型的 getter 和 setter?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ASP.NET MVC 应用程序在 firebase 实时数据库中设置数据
如何在 Flutter Web 项目中设置 Firebase 功能
用户扫描二维码以读取和写入特定数据库节点后如何在 Firebase 中设置安全规则
如果用户长时间没有写入,如何使用 Firebase Cloud Functions 在 Firebase 数据库中设置节点的值?