Retrofit2:当我尝试从JSON获取数据时的null响应

时间:2018-04-02 14:39:57

标签: android json retrofit response

我想从我的JSON获取数据,我已经使用jsonschema2pojo转换并在我的android项目中使类名为Login,但是当我尝试在我的类中获取数据时它仍然获得null值。 这是我的代码

Login.java

 @SerializedName("id_user")
    @Expose
    private String idUser;
    @SerializedName("id_role")
    @Expose
    private String idRole;
    @SerializedName("username")
    @Expose
    private String username;
    @SerializedName("password")
    @Expose
    private String password;
    @SerializedName("email")
    @Expose
    private String email;
    @SerializedName("id_peg")
    @Expose
    private Object idPeg;
    @SerializedName("id_pel")
    @Expose
    private String idPel;

Loginactivity

 public void login() {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    LoginAPI api = retrofit.create(LoginAPI.class);

    Call<Login> call = api.Login(username, password);

    call.enqueue(new Callback<Login>() {
        @Override
        public void onResponse(Call<Login> call, Response<Login> response) {
            response.body();
            Integer value=response.body().getValue();
            String message=response.body().getMessage();
            progress.dismiss();

            if(value==1){
                String email=response.body().getEmail();
                Toast.makeText(LoginActivity.this, message, Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(LoginActivity.this, message, Toast.LENGTH_SHORT).show();
            }

        }

        @Override
        public void onFailure(Call<Login> call, Throwable t) {
            t.printStackTrace();
            progress.dismiss();
            Toast.makeText(LoginActivity.this,"Network Connection Error",Toast.LENGTH_SHORT).show();
        }
    });
}

1 个答案:

答案 0 :(得分:0)

使用@Expose和@SerializedName可能是问题所在:

使用:

@Expose
private String id_user;

@SerializedName("id_user")
private String idUser;

This可能有所帮助。

修改

另外我注意到响应是一个数组,而不是一个对象!所以电话会是这样的:

Call<Login[]> call = api.Login(username, password);

相应的回复也将使用Login []而不是Login。