2017-10-26 6 views
1

firebaseデータベースからデータを取得しようとしています。 ブレークポイントはデータを取得していることを示していますが、クラスに正しく割り当てられていないように見えます。この例外が発生しKotlin Android Firebaseデータベースハッシュマップ

にjava.lang.ClassCastException:java.util.HashMapのは クラスにキャストすることはできません

override fun onDataChange(p0: DataSnapshot?) { 
    if (p0!!.exists()){ 
     val children = p0!!.children 
     children.forEach { 
      println(it.value.toString()) 
      var item : DashboardItem = it.value as DashboardItem 
      println(item) 
     } 
    } 
} 

これはDBの輸出です:

{ 
"dashboard" : [ 
    { "name" : "News"}, 
    { "name" : "Chatroom"}, 
    { "name" : "Music"}, 
    { "name" : "Quotes"}, 
    { "name" : "Reminder"}, 
    { "name" : "Poll"}, 
    { "name" : "Suggestion"}, 
    { "name" : "LogOut"} ] 
} 

クラスオブジェクトを作成したい

data class DashboardItem(val name: String = "") 

答えて

4

問題:DataSnapshot#getValue()のみnative types

として
Boolean 
String 
Long 
Double 
Map<String, Object> // closest to your object representation 
List<Object> 
あなたはので、代わりに

として DataSnapshot#getValue(Class<T> valueType)を使用する明示的なキャスト

を適用すると、したがって、エラーを要求したときMap<String, Object>がオブジェクトとして返されます

を返します。

val item : DashboardItem = it.getValue(DashboardItem::class.java) 
+0

THANKS Mr Singh valアイテム:DashboardItem = it.getValue(DashboardItem :: class.java)!! を追加する必要がありました。 –

+0

私は鎌田さん、ハッピーコーディングを助けることができてうれしいです –