我得到了一个Json数据,其中存储了图像和其他一些数据。我正在尝试使用Retrofit在imageview中获取该图像。我创建了代码中详细介绍的必要内容的DTO。改装失败,我遇到了错误。我该怎么解决?
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中获取图像
答案 0 :(得分:0)
问题在于您从后端获取的JSON是:
{
"promotions": [
...
]
}
这是一个JSON对象,而不是数组,但是您将getPromotionalBanner
方法定义为返回List<MerchantpromotionBDTO>
,因此JSON库无法执行反序列化,因为它期望数组(例如,以{{ 1}}),但是会找到START_OBJECT令牌(即[
)。
您可以通过将该方法的签名更改为以下方法来解决该问题:
{