onRetrofitFailure()无法从START_OBJECT令牌中反序列化java.util.ArrayList的实例

时间:2019-05-31 09:57:21

标签: android json api kotlin retrofit

我得到了一个Json数据,其中存储了图像和其他一些数据。我正在尝试使用Retrofit在imageview中获取该图像。我创建了代码中详细介绍的必要内容的DTO。改装失败,我遇到了错误。我该怎么解决?

  1. 创建的改造实例
  2. 创建JSON数据和属性的DTO
  3. 还创建了
  4. API服务 https://s3.ap-south-1.amazonaws.com/zestlife/promotional_banner.json 链接存储JSON数据的地方。

    @Parcelize
    @JsonIgnoreProperties(ignoreUnknown = true)
    open class MerchantPromotionDTO(
    
        @JsonProperty("image") var image: ImageUrlsDTO? = null,
        @JsonProperty("cta") var cta: CTADTO? = null,
        @JsonProperty("probability") var probability: Int? = 0,
        @JsonProperty("isDismissible") var isDismissible: Boolean? = true,
        @JsonProperty("showImmediate") var showImmediate: Boolean? = false
        ) : BaseResponseDTO()
    
    @Parcelize
        @JsonIgnoreProperties(ignoreUnknown = true)
        class MerchantpromotionBDTO(
        @JsonProperty("promotions") var promotions: ArrayList<MerchantPromotionDTO>?=null
    ) : BaseResponseDTO()
    
    @GET("https://demo6861386.mockable.io/banner/test")
    fun getPromotionalBanner(): Call<ArrayList<MerchantpromotionBDTO>>
    
    fun getPromotionalDetails(): LiveData<ResponseDTO<ArrayList<MerchantpromotionBDTO>>>{
        val pBannerDetails=MutableLiveData<ResponseDTO<ArrayList<MerchantpromotionBDTO>>>()
        ApiComponent.enqueue({
            getPromotionalBanner(
    
            )
        },object :OnRequestComplete<ArrayList<MerchantpromotionBDTO>>{
            override fun onComplete(responseDTO: ResponseDTO<ArrayList<MerchantpromotionBDTO>>) {
                pBannerDetails.value=responseDTO
            }
        }
    )
    

编辑:

override fun onStart() {
    super.onStart()

    populateData()
}

@Synchronized
private fun populateData() {       
    MerchantpromotionBDTO?.let {
        val promImageUrl = it.image?.getImageUrl(CommonUtils.getDisplayDensityLevel(context))
        picasso.load(if (promImageUrl.isNullOrEmpty()) null else promImageUrl)
                .placeholder(R.drawable.ic_placeholder_minimal)
                .into(ivMerchantPromotionBanner)
    }
}

我希望将响应添加到我的logcat中并在Imageview中获取图像

1 个答案:

答案 0 :(得分:0)

问题在于您从后端获取的JSON是:

{
    "promotions": [
        ...
    ]
}

这是一个JSON对象,而不是数组,但是您将getPromotionalBanner方法定义为返回List<MerchantpromotionBDTO>,因此JSON库无法执行反序列化,因为它期望数组(例如,以{{ 1}}),但是会找到START_OBJECT令牌(即[)。

您可以通过将该方法的签名更改为以下方法来解决该问题:

{