首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当不正确的数据输入时,升级到onFailure

当不正确的数据输入时,升级到onFailure
EN

Stack Overflow用户
提问于 2017-04-19 07:43:44
回答 1查看 421关注 0票数 0

我正在使用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

代码语言:javascript
运行
复制
public interface SignInService {
    @FormUrlEncoded
    @POST("api/signIn/")
    Call<SignInRespone> signIn(@Field("email") String email,
                               @Field("password") String password);

}

SignInResponse.java

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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());
            }
        });
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-19 08:18:34

根据注释,当您完全登录成功时,服务器返回正确的对象,这就是为什么没有异常,但是当服务器上没有电子邮件时,它返回data[]而不是数据对象,这就是为什么您要获得异常,因为您期待一个对象,但是服务器返回了一个数组。

解决方案:如果不存在电子邮件,则返回数据:空表单服务器

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43489518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档