遇到一个网络请求报错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>() {
@Override
public 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());
}
}
@Override
public void onFailure(@NonNull Call<TokenBean> call, @NonNull Throwable t) {
callback.onError(t.toString());
}
});
}
这是接口
@POST(Api.TOKEN_URL)
@FormUrlEncoded
Call<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了 这是一个小坑 下次遇到这种问题先检查自己的请求看下是不是类型请求错误了