改造 - 不同的反应

时间:2016-06-06 17:15:54

标签: android retrofit

我使用Retrofit在Android中使用API​​。成功响应看起来与错误/失败响应不同。我怎么能这样做呢?

我目前有这样的影响:

Call<AuthenticateUserResponse> authenticateUser(String id);

1 个答案:

答案 0 :(得分:4)

您可以使用基本响应扩展您的回复,并检查是否有错误或成功。以下是一个示例基本响应bean:

public class BaseResponse {
    @SerializedName("ResponseCode")
    private int code;
    @SerializedName("ResponseMessage")
    private String message;
    @SerializedName("ResponseText")
    private String text;
}

我的api会在每个响应者中返回ResponseCodeResponseMessageResponseText,我会从BaseResponse bean扩展我的响应并检查是否有错误。

您可以将自己的回复修改为api的回复计划。

编辑:这是您对Api的回复:

public class Error {
        @SerializedName("ResponseCode")
        private int code;
        @SerializedName("ResponseMessage")
        private String message;
        @SerializedName("ResponseText")
        private String text;
    }

public class YourWrapperResponse {
        @SerializedName("Error")
        private Error error;
        @SerializedName("AuthenticateUserResponse")
        private AuthenticateUserResponse authenticateUserResponse;
    }

你的电话会像:

Call<YourWrapperResponse> authenticateUser(String id);

我给你的上面的例子是你在每次成功的回复中得到的处理业务错误的一个例子。 成功意味着Http Status 200。此外,您无需在每个回复中都返回此Error object如果出现错误,您可以在回复中返回。

在Retrofit 2.0 + 中,您需要检查您的请求是否成功。以下是关于它的示例:

    Call<User> auth = YourApiProvider.getInstance().getServices().auth(userName, passowrd, grantType);
            auth.enqueue(new Callback<User>() {
                @Override
                public void onResponse(Call<User> call, Response<User> response) {
                    if (response.isSuccessful()) {
                        // Here you get a 200 from your server.
                        }
                    } else {
                        // Here you get an authentication error.
                        // You can get error with response.code();
                        // You can get your error with response.errorBody(); 
                        // or you can get raw response with response.raw()
                    }
                }

                @Override
                public void onFailure(Call<User> call, Throwable t) {
                    // Here you get error such as TimeOut etc.
                }
            });

我希望这会帮助你。祝你好运!

编辑:您还可以使用泛型来处理基本api响应。这是关于处理通用api响应的另一个answer