2016-04-20 3 views
2

Привет Я новичок в библиотеке Retrofit 2.0, у меня возникают проблемы с разбором некоторых json. Я рассмотрел некоторые другие решения на Stackoverflow, но не имел большой удачи в моей проблеме. Я пытаюсь вызвать api из андроида с модификацией 2.0. Но это ошибка бросания. Ожидается BEGIN_ARRAY, но BEGIN_OBJECT.Retrofit 2 ошибка бросания Ожидаемое BEGIN_ARRAY, но было BEGIN_OBJECT

Мой ответ от веб-АФИ:

{ 
    "items": [{ 
     "id": 19, 
     "lat": 23.79418, 
     "lng": 90.401859, 
     "user_id": 1, 
     "created_at": null, 
     "updated_at": null, 
     "user": { 
      "id": 1, 
      "name": "Tarif", 
      "email": "[email protected]", 
      "created_at": null, 
      "updated_at": null 
     } 

    }] 
} 

Это как мой класс Модель:

public class UserResponse { 
    private List<Items> items; 
    public List<Items> getItems() { 
     return items; 
    } 
    private class Items{ 
     private String id; 
     private String lat; 
     private String lng; 
     private String user_id; 
     private String created_at; 
     private String updated_at; 
     private List<User> user; 

     private class User{ 
      private String id; 
      private String name; 
      private String email; 
      private String created_at; 
      private String updated_at; 

      public String getId() { 
       return id; 
      } 

      public String getName() { 
       return name; 
      } 

      public String getEmail() { 
       return email; 
      } 

      public String getCreated_at() { 
       return created_at; 
      } 
      public String getUpdated_at() { 
       return updated_at; 
      } 


     } 
     public String getId() { 
      return id; 
     } 
     public String getLat() { 
      return lat; 
     } 
     public String getLng() { 
      return lng; 
     } 
     public String getUser_id() { 
      return user_id; 
     } 
     public String getCreated_at() { 
      return created_at; 
     } 
     public String getUpdated_at() { 
      return updated_at; 
     } 
     public List<User> getUser() { 
      return user; 
     } 
    } 
} 

Это мой интерфейс:

@GET("coordinates") 
Call <UserResponse> getUsers(); 

Это, как я телефон:

ITCService service = ApiUtils.createService(ITCService.class); 
     Call<UserResponse> call= service.getUsers(); 
     call.enqueue(new Callback<UserResponse>() { 
      @Override 
      public void onResponse(Call<UserResponse> call, retrofit2.Response<UserResponse> response) { 

       if (response.isSuccessful()) { 
        UserResponse res = response.body(); 
        Log.e("TAG", res.toString()); 

       } else { 
        // TODO: toast 
        Toast.makeText(getApplicationContext(),response.message(),Toast.LENGTH_SHORT).show(); 
       } 
      } 

      @Override 
      public void onFailure(Call<UserResponse> call, Throwable t) { 
       // TODO: error alert 

       Toast.makeText(getApplicationContext(),t.getMessage(),Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    } 

ответ

1

List<User> должен быть HashMap<String,Object> не список, потому что это не JSONObjectJSONArray .Since вы определяете класс пользователя в пункте сам просто использовать User вместо List.No нуждаются в HashMap.

+0

Как я могу объявить это? –

+0

Каким будет ключ и ценность? –

+0

просто объявить пользователя вместо списка

Смежные вопросы