改造处理成功和错误响应

时间:2015-07-20 23:14:04

标签: java android retrofit

我正在使用Retrofit连接到REST服务器,我需要处理成功响应和错误响应。我基于this sample来建立我的客户。

例如,在get token方法中,服务器成功响应具有以下结构:

{"status":0, "result":"7f4e879d1f64b10b5719a5b0ab6c7419"}

失败的回应是:

{"status":-1, "result":"Password is not valid"}

我的问题是app将错误响应视为成功。我的代码是:

-Rest api方法接口:

public interface Restapi {
    @GET("/?method=get_token")
    void login(@Query("login") String login, @Query("password") String password, RestCallback<LoginResponse> callback);
}

- 模型登录响应:

public class LoginResponse {
    //With @SerializedName("status") neither working 
    public int status;
    public String result;
    //Getters and setters
}

- 模型错误响应:

public class RestError {
    public int status;
    public String message;
    //Getters and setters
}

-Rest回调:

public abstract class RestCallback<T> implements Callback<T> {
    public abstract void failure(RestError restError);

    @Override
    public void failure(RetrofitError error) {
        RestError restError = (RestError) error.getBodyAs(RestError.class);
        if (restError != null)
            failure(restError);
        else {
            failure(new RestError(-1, error.getMessage()));
        }
    }
}

-Client class:

public class RestClient {

    private static Restapi REST_CLIENT;

    static {
        setupRestClient();
    }

    public static Restapi get() {
        return REST_CLIENT;
    }

    private static void setupRestClient() {
        RestAdapter restAdapter = new RestAdapter.Builder()
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .setEndpoint(Constants.getEndpoint())
                .build();

        REST_CLIENT = restAdapter.create(Restapi.class);
    }
}

错误在哪里?

1 个答案:

答案 0 :(得分:2)

这不是你的Android代码错误,改造正在完成他们的工作。您获得成功回调错误情况的原因是您的服务器正在返回成功的状态代码(200 - 299)。

在这种情况下,只有在网络连接错误或服务器脱机时才会调用故障回调。