java.lang.IllegalArgumentException:'retrofit2.Response'不是有效的响应正文类型。你是说ResponseBody吗?



我的问题与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 处理空响应体?

相关内容

最新更新