报错Unable to create converter for class问题"/>
关于retrofit2网络请求报错Unable to create converter for class问题
遇到一个网络请求报错Unable to create converter for class 的问题自我分析
首先先上我的网络请求的代码 代码说话
这是请求方法
public void getToken(String deviceCode, String timestamp, String system, String md5, final BeanCallback<TokenBean> callback ){Call<TokenBean> goodsDetail = getStringRetrofit().create(RegisterServer.class).obtainToken(deviceCode, timestamp, system, md5);goodsDetail.enqueue(new Callback<TokenBean>() {@Overridepublic void onResponse(@NonNull Call<TokenBean> call, @NonNull Response<TokenBean> response) {LogUtils.e(""+response.code());if (response.code() == 200) {callback.onSuccess(response.body());}else {callback.onError(response.message());}}@Overridepublic void onFailure(@NonNull Call<TokenBean> call, @NonNull Throwable t) {callback.onError(t.toString());}});}
这是接口
@POST(Api.TOKEN_URL)@FormUrlEncodedCall<TokenBean> obtainToken(@Field("device_code") String deviceCode,@Field("timestamp") String timestamp,@Field("system") String system,@Field("md5") String md5);
乍一看 没有问题啊 是这样啊 但是 就是这种请求方式会报Unable to create converter for class错误 而且你自己直接拼接接口去请求又是能拿到数据的这样就很尴尬 仔细检查了一波发现了错误
错误请看这里
Call<TokenBean> goodsDetail = getStringRetrofit().create(RegisterServer.class).obtainToken(deviceCode, timestamp, system, md5);
请注意 getStringRetrofit() 没错就是它引起的错误
因为 你前面接口和请求类型里面已经定义为了一个bean文件的类型 也就是你请求下来的数据已经不是string类型 是一个gson类型而你这时候去以getStringRetrofit()去请求 导致两种数据冲突 无法转换 导致报错
正确的写法应该是
Call<TokenBean> goodsDetail = getGsonRetrofit().create(RegisterServer.class).obtainToken(deviceCode, timestamp, system, md5);
直接以getGsonRetrofit()去请求他 数据类型匹配上了就完OK了 这是一个小坑 下次遇到这种问题先检查自己的请求看下是不是类型请求错误了
更多推荐
关于retrofit2网络请求报错Unable to create converter for class问题
发布评论