android retrofit无法解析数据geting null

时间:2017-06-21 05:45:05

标签: android json retrofit2

我有json数据,我使用gson转换器进行解析,并对pojo类进行响应并显示它。我变得空了。我已经看到很多关于这方面的问题,但我没有得到太多解决方案。看看我做错了什么。我是新改造的。

{
  "loginj": [
    {
      "JUser_Id": "20",
      "JFullName": "aaa",
      "JEmail": "abc@gmail.com"
    }
  ]
}

请参阅我的改造构建器类

 public static APIInterface getInterfaceService() {

    Gson gson = new GsonBuilder()
            .setLenient()
            .create();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    final APIInterface mInterfaceService = retrofit.create(APIInterface.class);
    return mInterfaceService;
}

模型类

public class Loginj {
   private String JUser_Id;
   private String JFullName;
   private String JEmail;
}

回调类APIInterface

Call<Loginj> login(@Body User user);

得到回应

Call<Loginj> loginResponseCall = apiInterface.login(user);
loginResponseCall.enqueue(new Callback<Loginj> () {
      @Override
      public void onResponse(Call<Loginj>  call, Response<Loginj>   response) {
            if (response.isSuccessful()) {
                   Loginj bodywValue = response.body();
                   Toast.makeText(getApplicationContext(),""+bodywValue.getJFullName(),
                                              Toast.LENGTH_SHORT).show();
             }
      }

      @Override
      public void onFailure(Call<Loginj>  call, Throwable t){}

3 个答案:

答案 0 :(得分:2)

选项1:

此处您的回复位于数组中,您需要像这样更改

{
  "JUser_Id":"20",
 "JFullName":"aaa",
 "JEmail":"abc@gmail.com"
}

选项2:

如果您无法更改API响应,请为与您的响应JSON匹配的响应创建pojo。

public class RestResponse {
 public List<Loginj> loginj;
}

你的代码看起来应该是这样的

Call<RestResponse> loginResponseCall = apiInterface.login(user);
            loginResponseCall.enqueue(new Callback<RestResponse> () {
                @Override
                public void onResponse(Call<RestResponse>  call, Response<RestResponse>   response) {
                    if (response.isSuccessful()) {
                        RestResponse body = response.body();
                        Loginj bodywValue = body.loginj.get(0);
                        Toast.makeText(getApplicationContext(),""+bodywValue.getJFullName(),Toast.LENGTH_SHORT).show();
                    }}

                    @Override
                    public void onFailure
                    (Call<RestResponse>  call, Throwable t){

                    }

答案 1 :(得分:2)

如果你json示例是正确的,那么loginj是一个对象数组,但是你要说改造,你想要一个对象。

尝试这样的事情:

public class Loginj {

    private List<LoginjData> loginj;

    private class LoginjData {
        private String JUser_Id;
        private String JFullName;
        private String JEmail;
    }
}

答案 2 :(得分:0)

再制作一个Model类。

public class ANY_NAME{
  private List<Loginj> loginj;
 }

并替换此代码:

Call<Loginj> login(@Body User user);

有了这个:

 Call<ANY_NAME> login(@Body User user);

您的代码可以使用