使用特定URL使用retrofit和gson空体

时间:2017-11-10 14:16:02

标签: android json retrofit2 gson

我尝试使用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

POJO课程:https://github.com/anaselhajjaji/android-samples/tree/master/JsonSample/app/src/main/java/com/example/anas/jsonsample/model

谢谢

2 个答案:

答案 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);
      }
    };
  }
}