无法从改造中获取数据

时间:2018-09-19 10:30:12

标签: android retrofit2

我正在使用改造功能来通过登录并在android中注册api。但是我得到的回应是409。我没有从api获取数据。此处使用翻新2

SignUpApi signupapi = Api_Config.getInstance3().getApiBuilder().create(SignUpApi.class);

        Call<SignUpApi.ResponseSignUp> call = signupapi.POSTDATA(UserName.getText().toString().trim(),
                Email.getText().toString().trim(),
                Password.getText().toString().trim(),
                Sex.getText().toString().trim(),
                Mobile.getText().toString().trim());
        call.enqueue(new Callback<SignUpApi.ResponseSignUp>() {
            @Override
            public void onResponse(Call<SignUpApi.ResponseSignUp> call, Response<SignUpApi.ResponseSignUp> response) {
            CustomProgressDialog.getInstance().dismiss();

            if (response.isSuccessful()){

                Log.e("Status is",response.body().getStatus().toString());

                if (response.body().getStatus() == 200){
                    CommonFunctions.getInstance().ShowSnackBar(SignInActivity.this,Constants.SuccessfullyRegistered);
                    CommonFunctions.getInstance().FinishActivityWithDelay(SignInActivity.this);
                }else if (response.body().getStatus() == 409){
                    CommonFunctions.getInstance().ShowSnackBar(SignInActivity.this,Constants.YouAreAlreadyRegistered);
                }else{
                    CommonFunctions.getInstance().ShowSnackBar(SignInActivity.this,response.body().getMsg());
                }
            } else {
                CommonFunctions.getInstance().ShowSnackBar(SignInActivity.this,Constants.SomethingWentWrong);
            }

            }

            @Override
            public void onFailure(Call<SignUpApi.ResponseSignUp> call, Throwable t) {
                CustomProgressDialog.getInstance().dismiss();
                CommonFunctions.getInstance().ShowSnackBar(SignInActivity.this,t.getMessage());
            }
        });
    }

下面是我的API配置

public static Api_Config getInstance3()
{
    if (ourInstance == null){
        synchronized (Api_Config.class){
            if ( ourInstance == null )
                ourInstance = new Api_Config();
        }
    }
    ourInstance.config3();
    return ourInstance;
}

private void config3() {
    Gson gson = new GsonBuilder()
            .setLenient()
            .create();
    String BASE_URL3 = LOGIN_AND_SIGNUP;
    mRetrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL3)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();
}

下面是我的Api类

public interface SignUpApi {

@FormUrlEncoded
@POST("register.php")
Call<ResponseSignUp> POSTDATA(@Field("user_name")String username,
                              @Field("user_email")String email,
                              @Field("user_password")String password,
                              @Field("user_gender")String sex,
                              @Field("user_mobile")String mobile
                              );

public class ResponseSignUp
{


    @SerializedName("status")
    @Expose
    private Integer status;
    @SerializedName("msg")
    @Expose
    private String msg;

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }


}

我是android的新手,真的很困惑为什么我的代码无法正常工作。寻求帮助。在此先感谢

1 个答案:

答案 0 :(得分:0)

请注意,如果您的响应成功,则意味着您获得了成功的代码(200 ... 300)。但是,如果您收到响应401、409 ..,则表示您收到错误,然后您的响应未成功。将错误句柄置于response.isSuccessful()条件之外。

if (response.isSuccessful()){
        //Handle success response here
        Log.e("Status is",response.body().getStatus().toString());
        CommonFunctions.getInstance().ShowSnackBar(SignInActivity.this,Constants.SuccessfullyRegistered);
        CommonFunctions.getInstance().FinishActivityWithDelay(SignInActivity.this);
        } else {
         // Handle error response here, 401, 409...
              if (response.body().getStatus() == 409){
                    CommonFunctions.getInstance().ShowSnackBar(SignInActivity.this,Constants.YouAreAlreadyRegistered);
              }else{
                    CommonFunctions.getInstance().ShowSnackBar(SignInActivity.this,response.body().getMsg());
            }
        }

您可以在retrofit2文件中进行检查。

/** Returns true if {@link #code()} is in the range [200..300). */
  public boolean isSuccessful() {
    return rawResponse.isSuccessful();
  }

编辑 Depper解释

我会尽力解释得更好。当您使用如下排队方法调用改造时:call.enqueue(),您期望从服务器获得响应或失败:onResponse()意味着您获得了响应,onFailure()意味着您无法连接到服务器,这可能意味着服务器已损坏或没有互联网连接。

如果您从服务器收到onResponse()并不表示它成功,仅表示您已收到响应,因此您需要使用此条件来检查此响应是否成功

if (response.isSuccessful){
}

什么是成功的响应?

如果您遇到这种情况response.isSuccessful,则表示您已经获得了成功的响应,这是代码介于200到300之间的响应。

但是,如果要检查是否有409码。 409代码表示响应失败,那么您需要在成功条件之外进行检查。

if (response.isSuccessful){
    // You got a successful response, the code is from 200 to 300.
} else {
    // You got a unsuccessful response, handle the code 401, 405, 409 here.
}