我正在使用改造功能来通过登录并在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的新手,真的很困惑为什么我的代码无法正常工作。寻求帮助。在此先感谢
答案 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.
}