我正在使用 Retrofit 连接到自定义 RESTful API。我已经通过 Curl 测试了与设备/API 的通信以及在非 Android 系统(mac os x)上运行的一些测试 Java 代码。curl 和 java 命令返回预期的响应。
但是,使用改造时,我不确定我是否在我的 RestAdapter(即 RestAdapter.Builder())中使用了不适当的配置来与该设备通信。
我得到的错误似乎是没有返回整个 json 内容,只有前 47 个字节左右。我希望这是我正在与之交谈的设备的一种行为,并且很好奇这是否意味着我需要按照 Retrofit API 文档中的描述实现异步回调。在我这样做之前,我想从一些对 Retrofit 有更多经验的人那里获得反馈。
错误如下(为公众消费而消毒):
12-06 08:50:52.962 28267-1735/com.mycompany.project D/Retrofit? [ 12-06 08:50:52.972 28267: 1735 D/Retrofit ]
{"OBJECT1":{"@Version":1,"OBJECTARRAY1":[
12-06 08:50:52.972 28267-1735/com.mycompany.project D/Retrofit? <--- END HTTP (46-byte body)
12-06 08:50:52.982 28267-1735/com.mycompany.project W/System.err retrofit.RetrofitError: retrofit.converter.ConversionException: com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 47
我正在这样设置 RestAdapter:
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(serverUrl)
.setClient(new OkClient(RestUtils.getHttpClient(3000, 3000, username, password)))
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade requestFacade) {
requestFacade.addHeader("Accept", "application/json");
requestFacade.addHeader("Client-Id", "12345");
}
})
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
service = restAdapter.create(OBJECT1.class);
对此问题的任何见解将不胜感激。我了解此错误与 java.io.EOFException 有关,但无法验证我从设备返回的内容,除了上面显示的错误输出。我非常倾向于异步与同步是问题,但我愿意接受任何建议。
干杯!