Для обучения я создаю приложение для Android с помощью Realm и Edinburg Festival Api. Все идет хорошо, за исключением одной проблемы.Пользовательский десериализатор для RealmObject
Я использую следующие преобразовать извлеченное JSON в RealmObjects:
public void onResponse(final String response) {
realm.executeTransactionAsync(new Realm.Transaction(){
@Override
public void execute(Realm realm) {
// Update our realm with the results
parseImages();
realm.createOrUpdateAllFromJson(Festival.class, response);
}
}
}
Это прекрасно работает для одного поля, изображений, за исключением. Образная часть JSON:
"images": {
"031da8b4bad1360eddea87e8820615016878b183": {
"hash": "031da8b4bad1360eddea87e8820615016878b183",
"orientation": "landscape",
"type": "hero",
"versions": {
"large-1024": {
"height": 213,
"mime": "image/png",
"type": "large-1024",
}
"width": 1024
}
}
Проблема заключается в том, что хэш внутри объекта изображения. Я понятия не имею, как справиться с этим. Хэш отличается для каждого фестиваля. Можно ли создать собственный десериализатор JSON в моем RealmObject?
Последний пример кода моя текущая модель:
public class Festival extends RealmObject {
@PrimaryKey
public String title;
RealmList<Image> images;
public String description_teaser;
public String description;
public String genre;
public String age_category;
public String website;
public RealmList<Performance> performances;
public int votes;
}
Я знаю, мой ПК не является оптимальным, но это еще только тестирование, чтобы получить изображения рабочих и мне нужно, чтобы установить ПК для миграции.
Любые советы приветствуются, ура :)
Обновление
Добавлена модель изображения:
public class Image extends RealmObject {
public String hash;
public String orientation;
public String type;
RealmList<Version> versions;
}
Update 2
Моя попытка разобрать изображения перед вызовом realm.createOrUpdateAllFromJson (Festival.class, ответ);
private void parseImages(String jsonString) throws JSONException {
JSONArray jsonArr = new JSONArray(jsonString);
for(int i = 0; i < jsonArr.length(); i++){
JSONObject jsonObj = jsonArr.getJSONObject(i);
JSONObject images = (JSONObject)jsonObj.get("images");
Iterator<String> iter = images.keys();
while (iter.hasNext()) {
String key = iter.next();
try {
JSONObject value = json.get(key);
realm.createOrUpdateObjectFromJson(Image.class,value);
} catch (JSONException e) {
// Something went wrong!
}
}
}
}
Update 3
Я создал функцию, которая чистит сломанную JSON я получаю от API. Это не очень приятно, но сейчас это работает. он удаляет хеши и версии wierd и просто помещает их в массив. Я уверен, что это может быть более эффективно написано, но я просто займусь этим, чтобы я мог продолжить работу с остальной частью моего приложения. См. Мой собственный ответ.
Nice one - ------ – EpicPandaForce