我尝试使用retrofit和gson来使用JSON URL,实现的解决方案非常类似于下面教程中描述的内容:
https://code.tutsplus.com/tutorials/getting-started-with-retrofit-2--cms-27792
但是,当我想要使用以下网址时: https://fantasy.premierleague.com/drf/leagues-classic-standings/624264
即使url返回JSON数据(我们可以通过在浏览器中粘贴URL来验证这一点),我得到一个空的响应,我有以下异常:
改进gson java.io.EOFException:第1行第1列的输入结束 路径$
我不明白为什么以及为什么我在代码中遗漏了。你能帮忙吗?
代码在github上: https://github.com/anaselhajjaji/android-samples/tree/master/JsonSample
谢谢
答案 0 :(得分:1)
我终于找到了解决方案,我在标题中更改了User-Agent值,显然服务器不接受retrofit-okhttp发送的值,值类似于okhttp3 ...我将其更改为另一个值。
答案 1 :(得分:-1)
好的一些序列化程序不接受空值。在您的情况下,您可以尝试在构建器中添加以下内容
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(new NullOnEmptyConverterFactory())
.addConverterFactory(GsonConverterFactory.create())
.build();
还要添加你的代表团工厂
class NullOnEmptyConverterFactory implements Converter.Factory {
@Override public Converter<ResponseBody, ?> responseBody(Type type, Annotation[] annotations, Retrofit retrofit) {
final Converter<ResponseBody, ?> delegate = retrofit.nextResponseBodyConverter(this, type, annotations);
return new Converter<>() {
@Override public void convert(ResponseBody body) {
if (body.contentLength() == 0) return null;
return delegate.convert(body);
}
};
}
}