Android 指定为非null的改装参数为null
我是Kotlin的新手,我试图解析一个简单的JSON,但我得到了一个Android 指定为非null的改装参数为null,android,kotlin,model,retrofit2,Android,Kotlin,Model,Retrofit2,我是Kotlin的新手,我试图解析一个简单的JSON,但我得到了一个 “指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParametersNotNull,参数凭证” result.products始终为空,但我可以在日志中看到,通过200OK请求,Reformation正确地获得了json。所以我想当我试图解析json时,这可能是个问题 我怎样才能解决这个问题 我在下面添加了我的代码 disposable = ApiServe.ge
“指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParametersNotNull,参数凭证”
result.products
始终为空,但我可以在日志中看到,通过200OK请求,Reformation正确地获得了json。所以我想当我试图解析json时,这可能是个问题
我怎样才能解决这个问题
我在下面添加了我的代码
disposable = ApiServe.getVouchers()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ result -> processVouchers(result.products) },
{ error -> error(error.message)}
)
fun processVouchers(vouchers : List<Product>){
mCallback?.onResponseVouchers(vouchers)
}
disposable=ApiServe.get凭单()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(
{result->process凭单(result.products)},
{error->error(error.message)}
)
凭证(凭证:列表){
mCallback?.OnResponseVoucher(凭证)
}
在ApiServe课程中获得担保
@GET(Api.ENDPOINT.VOUCHER_ENDPOIN)
fun getVoucher(): Observable<Response<Vouchers>>
@GET(Api.ENDPOINT.document\u ENDPOIN)
fun get凭证():可观察
模型
数据类凭证(val产品:列表)
数据类产品(val代码:字符串,val名称:字符串,val价格:双精度)
JSON
{“产品”:[{“代码”:“凭单”,“名称”:“凭单”,“价格”:3},{“代码”:“球”,“名称”:“凭单球”,“价格”:10},{“代码”:“牛奶”,“名称”:“凭单牛奶”,“价格”:8.5}]}
我相信这里的问题可能是这样的
fun getVouchers(): Observable<Voucher.Vouchers>
fun get凭单():可观察
您确定getVoucher返回的类型正确吗?它不应该是可见的吗
编辑:
原来作者在他的GsonConverterFactory中使用了
excludeFieldsWithModifiers
,这导致了对模型的解析问题。我认为这是因为您在翻新
服务接口中用响应
包装了返回类型。试着像这样改变:
@GET(Api.ENDPOINT.VOUCHER_ENDPOIN)
fun getVoucher(): Observable<Voucher>
@GET(Api.ENDPOINT.document\u ENDPOIN)
fun get凭证():可观察
问题中的我的模型类数据类凭证(val产品:列表)数据类产品(val代码:字符串,val名称:字符串,val价格:双精度)我已在Android Studiot中使用插件生成模型类这是我的模型类:数据类凭证(val产品:列表)数据类产品(val代码:字符串,val名称:字符串,val价格:双精度)您的GetDelicients()看起来像什么?当结果部件(结果对象)被触发时,您是否尝试过在一次性中进行调试?是的,result.products上的result objet get null可能是我的模型类的问题??我已经用get凭单()更新了是的,好的,我把有趣的get凭单()放在了可观察的位置,但是在我的改进方法{result->process凭单(result.products)}中,products是空的。但是我可以在日志中看到我有200 ok和json。我只是从我的问题中删除你是否有可能使用proguard?Android studio提供的默认proguard。只是删除和所有似乎工作,但我的产品仍然无效。我很确定这一定是模型类的一个问题。您确定在您的项目中没有ApiService可能引用的具有名称凭证的其他类吗?快速检查将是检查导入或cmd(ctrl)+b返回类型的getVouchersYes,这是唯一的一个。我可以将名称更改为另一个名称,products=null此答案是错误的-将其包装在响应中可以对错误检查过程进行更精细的控制-如果没有它,任何不成功的响应都会触发onError。实际上,通过包装它,您可以检查错误是否是由于缺少internet连接造成的,或者只是来自服务器的400个响应。那么,您为什么不在回答中包装一个响应呢?我不是在说包装是否有用。我只是用给定的json响应映射对象。因为在这种情况下不需要它,所以它不会导致错误。正如我在编辑后的回答中所说,问题出在GsonConverterFactory的排除字段修改器中,作者在问题中没有具体说明这一点。哈哈,很有趣。对于映射给定的JSON,我认为我的答案是清楚和正确的。所以我不想再和你在一起浪费时间了。谢谢你的反馈。它不是,因为在一开始作者有一个未包装的版本,就像你的一样,有相同的问题。去吧,想浪费就浪费吧。很好的一天
@GET(Api.ENDPOINT.VOUCHER_ENDPOIN)
fun getVoucher(): Observable<Voucher>