【问题标题】:How to get value from firebase realtime database in android?如何从android中的firebase实时数据库中获取价值?
【发布时间】:2021-05-07 01:06:03
【问题描述】:

这是我试图将“品牌”存储为 arrayList 的 firebase 数据库的图片。

下面是我的代码

   var brandArrayList= ArrayList<BrandModel>()
   database= FirebaseDatabase.getInstance()
    mRef=database.getReference("brand")
    mRef.addValueEventListener(object :ValueEventListener{
        override fun onDataChange(snapshot: DataSnapshot) {
            for (childSnapshot in snapshot.children) {
                val getBrand= childSnapshot.getValue<BrandModel>(BrandModel::class.java)
                getBrand!!.item_id=childSnapshot.key
                brandArrayList.add(getBrand!!)
            }
          }
        }

        override fun onCancelled(error: DatabaseError) {
            Log.i("Error",error.toString())
        }
    })

我在线路上遇到错误 val getBrand= childSnapshot.getValue(BrandModel::class.java) 我已经定义了我的模型类,如下所示

@Parcelize
data class BrandModel(var item_id:String?=null,
                  var name:String?=null,
                  var sizeinfo:List<SizeModel>?=null):Parcelable
@Parcelize
data class SizeModel(var quantity:String?=null,
                 var name:String?=null):Parcelable

我收到了这个错误

com.google.firebase.database.DatabaseException: Expected a List while 
deserializing, but got a class java.util.HashMap

【问题讨论】:

    标签: android firebase android-studio kotlin firebase-realtime-database


    【解决方案1】:

    Kotlin 代码中的List 转换为数据库中的以下结构:

    "sizeinfo": {
      "0": { ... },
      "1": { ... },
      "2": { ... },
    }
    

    只有当键中有序列号时,Firebase 才会将其转换为 List。当密钥的格式不同时,例如在您的情况下,它会转换为Map

    因此,您要么需要更改数据结构,要么(更有可能)更改代码以匹配 JSON:Map&lt;String, SizeModel&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多