我的问题非常类似于Retrofit 2.0 beta 4响应得到IllegalArgumentException,但它的答案对我没有帮助.
我正在从Retrofit 1.9迁移到2.0.2.一旦启动,我正在注册我的应用程序以进行消息传递.
/**
* Synchronous method to register GCM Token on Backend Server
*
* @return true, in case of success response, false otherwise.
*/
public boolean registerGCMToken()
{
...
try
{
Call<Response> call = mService.registerGCMToken(sessionId, this.ADDITIONAL_QUERY);
final Response response = call.execute().body(); // <<< Error points here
final DefaultResponse defaultResponse = DefaultResponse.newInstance(response);
return defaultResponse.isSuccess();
}
catch (IOException ignored)
{
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我的界面如下:
@GET("my/url")
Call<Response> registerGCMToken(@Header(Constant.HEADER_WILDCARD) String accessToken,
@QueryMap Map<String, String> additionalQuery);
Run Code Online (Sandbox Code Playgroud)
一旦我启动应用程序,我收到此错误:
java.lang.IllegalArgumentException:'retrofit2.Response'不是有效的响应主体类型.你的意思是ResponseBody?
并指出我上面提到的那条线.
我的newInstance方法如下所示:
public static final DefaultResponse newInstance(final Response response)
{
final DefaultResponse defaultResponse = new DefaultResponse();
if (response != null)
{
defaultResponse.status = response.code();
}
return defaultResponse;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我需要知道什么是HTTP状态代码.通过更改Response泛型ResponseBody我无法获取http状态代码.那么,你的建议是什么?谢谢
从你建议的帖子中读到答案时我得到的是,而不是这样:
@GET("my/url")
Call<Response> registerGCMToken(@Header(Constant.HEADER_WILDCARD) String accessToken,
@QueryMap Map<String, String> additionalQuery);
Run Code Online (Sandbox Code Playgroud)
试试:
@GET("my/url")
Call<ResponseBody> registerGCMToken(@Header(Constant.HEADER_WILDCARD) String accessToken,
@QueryMap Map<String, String> additionalQuery);
Run Code Online (Sandbox Code Playgroud)
因为您在这里得到ResponseBody而不是Response:
final Response response = call.execute().body();
Run Code Online (Sandbox Code Playgroud)
就像他做的那样:我如何使用Retrofit 2处理空响应体?
| 归档时间: |
|
| 查看次数: |
3581 次 |
| 最近记录: |