我正在使用firebase,这是我的数据类定义:
data class ClaimOrder(val address: String? = null,
val amount: Long = 0L,
val isProcessed: Boolean = false,
val onCreate: kotlin.Any? = ServerValue.TIMESTAMP)
但是在日志中我看到以下警告:W/ClassMapper: No setter/field for isProcessed found on class com.guness.bitfarm.service.models.ClaimOrder
我试过@SerializedName("isProcessed")
但没有运气。
答案 0 :(得分:6)
我找不到Firebase提供的关于getter和setter命名规则的任何官方文档,但似乎他们正在寻找JavaBean-like getters/setters
当您拥有名为getIsProcessed()
的媒体资源时,Firebase要求您拥有名为setIsProcessed()
/ is
的getter / setter。但是,当属性以Kotlin中的isProcessed()
开头时,将应用不同的命名规则。它会根据Kotlin doc生成名为setProcessed()
/ is
的getter / setter:
如果属性的名称以
is
开头,则使用不同的名称映射规则:getter的名称将与属性名称相同,并且将通过替换获取setter的名称set
isOpen
isOpen()
。例如,对于属性setOpen()
,将调用getterBoolean
,并将setter称为imageView
。此规则适用于任何类型的属性,而不仅仅是<ImageView android:id="@+id/poster_imageview" android:layout_width="130dp" android:layout_height="183dp" android:adjustViewBounds="true" android:scaleType="centerCrop" android:src="@drawable/placeholder" />
。
答案 1 :(得分:1)
我不知道具体原因,但这是我的猜测:
变量名isProcessed
会导致生成不同的访问者方法,因此基础gson
和kotlin
方法不匹配。
然而,只使用processed
似乎可以解决问题。