我正在Kotlin中创建一个Android专用的Google Maps App,并且与Firebase有关联。在与Firebase连接期间崩溃
我可以将数据添加到数据库,但是当我尝试下载数据时,应用程序崩溃。在数据库中,我有表“ cities”,其中存放着“ City”类型的对象。
private lateinit var citiesList: MutableList<City>
...
citiesList = mutableListOf()
var ref = FirebaseDatabase.getInstance().getReference("cities")
ref.addValueEventListener(object: ValueEventListener {
override fun onDataChange(p0: DataSnapshot) {
for ( c in p0.children) {
val city = c.getValue(City::class.java)
citiesList.add(city)
}
}
城市班级:
class City ( val name: String, val latitude: Double, val longitude: Double)
应用程序在此行崩溃:
val city = c.getValue(City :: class.java)。
我也不知道为什么城市价值的类型是“城市”,而不是“城市”。也许这是问题的根源。我无法将城市添加到城市列表:Type mismatch. Required: City, Found: City?
答案 0 :(得分:0)
要解决此问题,请从以下位置更改您的City
类:
class City ( val name: String, val latitude: Double, val longitude: Double)
到
class City (val name: String = "", val latitude: Double = 0.0, val longitude: Double = 0.0)
否则,您将收到以下错误:
java.lang.RuntimeException:无法反序列化对象。 Class City没有定义无参数的构造函数。如果您使用的是ProGuard,请确保不删除这些构造函数。
因此请记住,City
类中的每个字段都必须在构造函数中初始化。