Tengo datos json que estoy analizando usando el convertidor gson y dando respuesta a la clase pojo y mostrándola. Me estoy volviendo nulo. He visto muchas preguntas con respecto a esto, pero no obtengo mucha solución. Mira lo que estoy haciendo mal. Soy nuevo en la modernización.

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

Ver mi clase de generador de modificación

 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;
}

Clase de modelo

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

Clase de devolución de llamada APIInterface

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

Obteniendo respuesta

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){}
1
androidking 21 jun. 2017 a las 08:45

3 respuestas

La mejor respuesta

Opción 1:

Aquí su respuesta está en la matriz que necesita cambiar así

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

Opción 2:

Si no puede cambiar su respuesta de API, cree un pojo para una respuesta que coincida con su respuesta JSON.

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

Entonces su código debería verse así

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){

                    }
2
Kishan Vaghela 21 jun. 2017 a las 06:12

Haz una clase de modelo más.

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

Y reemplaza este código:

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

Con esto:

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

Su código funcionará

0
Mr Code 21 jun. 2017 a las 06:08

Si su ejemplo json es correcto, entonces loginj es una matriz de objetos, pero está diciendo que debe adaptar, que desea un solo objeto.

Prueba algo como esto:

public class Loginj {

    private List<LoginjData> loginj;

    private class LoginjData {
        private String JUser_Id;
        private String JFullName;
        private String JEmail;
    }
}
2
untosabla 21 jun. 2017 a las 06:13