我正在使用Android中的Retrofit登录,使用POST方法登录到服务器,使用API并将其响应回来。当我插入服务器中已经有要登录的数据时,它将转到onResponse,但当我插入服务器中没有的数据时,我会选择onFailure,但是在我的API中,当没有数据时,它将响应状态False。这是当它转到onFailure时的消息
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:预期的BEGIN_OBJECT,但BEGIN_ARRAY在第1列56 path $.data上
SignInService.java
public interface SignInService {
@FormUrlEncoded
@POST("api/signIn/")
Call<SignInRespone> signIn(@Field("email") String email,
@Field("password") String password);
}SignInResponse.java
public class SignInRespone {
@SerializedName("success")
private boolean success;
@SerializedName("message")
private String message;
@SerializedName("data")
private Data data;
public boolean getSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public static class Data {
@SerializedName("id")
private int id;
@SerializedName("username")
private String username;
@SerializedName("email")
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
}SignInRequest.java
public class SignInRequest {
@SerializedName("email")
private String email;
@SerializedName("password")
private String password;
public SignInRequest(String email, String password) {
this.email = email;
this.password = password;
}
}SignInActivity.java
public void signIn(){
signInService = ServiceGenerator.createService(SignInService.class);
Call<SignInRespone> call= signInService.signIn("jonh1@gmail.com","12345");
call.enqueue(new Callback<SignInRespone>() {
@Override
public void onResponse(Call<SignInRespone> call, Response<SignInRespone> response) {
Log.e(">>>>",response.body().getData().getEmail());
startActivity(new Intent(getApplicationContext(), MainActivity.class));
finish();
}
@Override
public void onFailure(Call<SignInRespone> call, Throwable t) {
Log.e(">>>>", t.toString());
}
});
}发布于 2017-04-19 08:18:34
根据注释,当您完全登录成功时,服务器返回正确的对象,这就是为什么没有异常,但是当服务器上没有电子邮件时,它返回data[]而不是数据对象,这就是为什么您要获得异常,因为您期待一个对象,但是服务器返回了一个数组。
解决方案:如果不存在电子邮件,则返回数据:空表单服务器
https://stackoverflow.com/questions/43489518
复制相似问题