ClassMapper:aBooleanType没有setter / field

时间:2017-08-16 17:57:34

标签: android firebase gson kotlin

我正在使用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")但没有运气。

2 个答案:

答案 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(),将调用getter Boolean,并将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会导致生成不同的访问者方法,因此基础gsonkotlin方法不匹配。

然而,只使用processed似乎可以解决问题。