2015-10-28 5 views
1

Я хочу сделать GET запрос и получить объекты с разными именами параметров:дооснащение получить массив с различными объектами

{ 
    "monday": { 
    "open_time": "06:30", 
    "close_time": "20:30" 
    }, 
    "tuesday": { 
    "open_time": "06:30", 
    "close_time": "20:30" 
    }, 
    "wednesday": { 
    "open_time": "06:30", 
    "close_time": "20:30" 
    }, 
    "thursday": { 
    "open_time": "06:30", 
    "close_time": "20:30" 
    }, 
    "friday": { 
    "open_time": "06:30", 
    "close_time": "20:30" 
    }, 
    "saturday": { 
    "open_time": "08:00", 
    "close_time": "19:00" 
    }, 
    "sunday": { 
    "open_time": "08:00", 
    "close_time": "19:00" 
    } 
} 

Так что я сделал DayEntity, но не знаю, как использовать мой понедельник, вторник ЭСТ? Служба jsonschema2pojo хочет создать множество занятий с понедельника по воскресенье.

public class DayEntity { 

    @SerializedName("open_time") 
    @Expose 
    private String openTime; 

    @SerializedName("close_time") 
    @Expose 
    private String closeTime; 

    public void setOpenTime(String openTime) { 
     this.openTime = openTime; 
    } 

    public void setCloseTime(String closeTime) { 
     this.closeTime = closeTime; 
    } 

UDP: И если GSON мог разобрать его хорошо, как использовать его с комбинацией Retrofit? У меня есть WeekEntity и он возвращает меня NullPointer в успехе()

public class WeekEntity { 

    public HashMap<String, DayEntity> week; 

    public HashMap<String, DayEntity> getWeek() { 
     return week; 
    } 
} 



    public void getBusinessHours(final Context context) { 
      RestAdapter restAdapter = formatHeader(NetworkConstants.BUSINESS_HOURS_URL); 
      restAdapter.create(ApiService.class).getBusinessHours(new Callback<WeekEntity>() { 
       @Override 
       public void success(WeekEntity weekEntity, Response response) {     
        Log.v("~~~~~success", weekEntity.getWeek().toString()); 
       } 

       @Override 
       public void failure(RetrofitError error){     
       } 
      });  
    } 

ответ

0
class WeekEntity{ 
    HashMap<String, DataEntity> week; 
    (...) 
} 

Разбираем ваш JSON в этом унд вы получите карту dayname -> DayEntity.

+0

Теперь у меня есть модифицированная iteraction, как это и возвращает нуль, как weekEntity все время '@Override общественных недействительный успеха (WeekEntity weekEntity, ответ Response) { } ' –

+0

Вы уверены, что ваш сервер вернет JSON, указанный выше? –

0

Gson 2.x способен преобразовать JSON с переменными ключами в Map<String, DataEntity>

+0

Не могли бы вы показать, как разбирать его с помощью модификации? Фактически это делается автоматически, когда есть правильные аннотированные поля, и я немного смущен, как это сделать сейчас. –

+0

то, что вы разместили, в основном правильное. Не используйте 'HashMap', вместо этого используйте' Map' – Blackbelt

+0

Ох, он снова дает nullpointer –

0

Ваш код в должно быть так.

public class DayEntity { 
    public CheckTime monday; 
    public CheckTime tuesday; 
    public CheckTime wednesday; 
    public CheckTime thursday; 
    public CheckTime friday; 
    public CheckTime saturday; 
    public CheckTime sunday; 
    public class CheckTime 
    { 
     private String open_time; 
     private String close_time; 
     //add your setter and getter here 
    } 
} 
2

Лучше всего использовать Gson плагин для андроида студии, чтобы преобразовать JSON строку в InnerClassEntity.

1) скачать плагин из here и установить его для андроида студии в Файл/настройки/плагин

2) После установки, создать класс, а затем правой кнопкой мыши/Сформировать/GsonFormat и вставить ответ и нажмите «ОК». автоматически создаются объекты для вашего ответа (Json String). Сохраните и сделайте.

3) вы можете перебирать массив в onResponse тогда как этот

public void onResponse(Response<ModelClass> response, Retrofit retrofit) { 

     for (int i=0;i<response.body().getResponse().getArray_name().size();i++) 
     { 
     Log.i("TAG", "retro array :" + response.body().getResponse().getArray_name().get(i).getItem()); 
     } 

} 

и когда вы intializing переоснащения назначить ConverterFactory как это.

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

и build.gradle

compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' 
Смежные вопросы