我的问题与Retrofit 2.0 beta 4响应非常相似,但得到IllegalArgumentException,但它的答案对我没有帮助。
我正在从改造 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;
}
我的界面看起来像:
@GET("my/url")
Call<Response> registerGCMToken(@Header(Constant.HEADER_WILDCARD) String accessToken,
@QueryMap Map<String, String> additionalQuery);
启动应用程序后,我收到此错误:
java.lang.IllegalArgumentException: 'retrofit2.响应'不是 有效的响应正文类型。你是说ResponseBody吗?
并指向我上面提到的那行。
我的新实例方法如下所示:
public static final DefaultResponse newInstance(final Response response)
{
final DefaultResponse defaultResponse = new DefaultResponse();
if (response != null)
{
defaultResponse.status = response.code();
}
return defaultResponse;
}
如您所见,我需要知道HTTP状态代码是什么。通过将Response
通用更改为ResponseBody
我无法获取 http 状态代码。您的建议是什么?
我在阅读您建议的帖子中的答案时得到的是,而不是这个:
@GET("my/url")
Call<Response> registerGCMToken(@Header(Constant.HEADER_WILDCARD) String accessToken,
@QueryMap Map<String, String> additionalQuery);
尝试:
@GET("my/url")
Call<ResponseBody> registerGCMToken(@Header(Constant.HEADER_WILDCARD) String accessToken,
@QueryMap Map<String, String> additionalQuery);
因为您在这里得到的是响应正文而不是响应:
final Response response = call.execute().body();
就像他所做的那样:我如何使用 Retrofit 2 处理空响应体?