Android 接口 返回code,Android 使用Retrofit自定义Converter解析相同接口返回不同数据...

本文介绍了如何在Android中使用Retrofit处理返回不同数据格式的接口。当登录接口成功或失败时,后台返回的数据格式不同,导致Gson解析失败。通过创建自定义的`MyGsonResponseBodyConverter`,解析`BaseBean`来判断接口的成功状态,并自定义`DataResultException`处理错误信息。最后,通过`MyGsonConverterFactory`替换默认的`GsonConverterFactory`,并在Subscriber中处理异常,简化代码逻辑。
摘要由CSDN通过智能技术生成

一、简介

在使用Retrofit访问后台接口时返回的数据是否是一样的格式,比如登录接口,在我们输入密码成功或错误的时候后台返回的数据格式是不同的,这样我们在添加GsonConverterFactory解析后台数据时由于后台会返回两种不同的数据所以会导致Gson解析失败的错误信息。这里以自己项目的登录接口为例子记录下自己的解决方案。

二、问题

登录成功和失败的两种数据格式:

{"success":false,"code":-1,"msg":"密码错误","data":"密码错误"}

{"success":true,"code":1,"msg":"操作成功","data":{"JXHDAPIToken":"1ccf7b01ed544882aacda365c8f620d2"}}

三、解决思路

从上面数据中我们可以发现后台返回的数据只有data中的数据是不一样,其他几个字段都是一样的。这个时候我们可以将几个相同字段抽取出来,通过修改GsonConverterFactory来实现解析不同数据。

修改GsonConverterFactory:

我们只需要点击进入GsonConverterFactory的源码中看看它的代码,这里面我们只需要修改返回的GsonResponseBodyConverter对象。

@Override

public Converter responseBodyConverter(Type type, Annotation[] annotations,

Retrofit retrofit) {

TypeAdapter> adapter = gson.getAdapter(TypeToken.get(type));

return new GsonResponseBodyConverter<>(gson, adapter);

所以我们再点击进入GsonResponseBodyConverter中查看它的代码结构:

final class GsonResponseBodyConverter implements Converter {

private final Gson gson;

private final TypeAdapter adapter;

GsonResponseBodyConverter(Gson gson, TypeAdapter adapter) {

this.gson = gson;

this.adapter = adapter;

}

@Override public T convert(ResponseBody value) throws IOException {

JsonReader jsonReader = gson.newJsonReader(value.charStream());

try {

return adapter.read(jsonReader);

} finally {

value.close();

}

}

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值