2016-05-02 2 views
1

Мои данные JSON выглядит так от сервера апиНе удалось обработать RealmList <RealmList <RealmInt>> в Realm.io

{ 
    //... 
    PredecessorIds:[[1,2][3,4][5]] 
    //... 
} 

Я могу успешно обрабатывать массивы Integer или String, по RealmList<RealmInt>, но на этот раз мне не удалось с ошибка, поскольку RealmList> не поддерживается. "Type parameter 'io.realm.realmList' is not within its bounds...."

RealmInt см. this link.

Я пытался решить с помощью RealmList<RealmLista>, где RealmLista простирается от RealmObject и имеет RealmList как этот

public class RealmLista extends RealmObject { 
public RealmList<RealmInt> value; 
public RealmLista() { 
} 

public RealmLista(RealmList<RealmInt> val) { 
    this.value = val; 
} 

}

, а затем создал RealmListaTypeAdapter и добавили его в Gson, но при десериализации Gson expects an Object (RealmLista) but is found array, а данные, показанные выше с сервера, очевидны.

//RealmListAdapter for Gson 
@Override 
public RealmLista read(JsonReader in) throws IOException { 
    RealmLista lista = new RealmLista(); 
    Gson gson = new Gson(); 
    //how to read that [[1],[3,4]] int into RealmLista 
    in.beginArray(); 
    while (in.hasNext()) { 
     lista.value.add(new RealmInt(in.nextInt())); 
    } 
    in.endArray(); 
    return lista; 
} 

Есть ли способ для хранения простого List<List<Integer>> путем преобразования в RealmObject любого типа при сохранении, List<List<Integer>> легко преобразуется Gson. : -/

+0

[Это работает просто 'RealmList ] (https: //gist.github .com/cmelchior/1a97377df0c49cd4fca9), но вам нужен новый объект, в котором хранится intm RealmList, если вы хотите сохранить массив из них. – EpicPandaForce

ответ

1

Realm не поддерживает списки списков в настоящее время. См. https://github.com/realm/realm-java/issues/2549.

Итак, идея EpicPandaForce о создании объекта RealmObject, который содержит этот внутренний список, вероятно, является лучшим решением.

Это может выглядеть примерно так:

public class Top extends RealmObject { 
    private RealmList<ChildList> list; 
} 

public class ChildList extends RealmObject { 
    private RealmList<RealmInt> list; 
} 

public class RealmInt extends RealmObject { 
    private int i; 
} 

Правильная ссылка на суть должна быть: https://gist.github.com/cmelchior/1a97377df0c49cd4fca9

+0

Я уже это делаю. Проблема с Гсеном. Он не принимает объект (имеющий массив), где я получаю прямой массив. – ahmadalibaloch

+0

Похоже, вы должны создать собственный десериализатор GSON. В этом есть пример. –

+0

Можете ли вы увидеть мой адаптер в вопросе, я сталкиваюсь с проблемой при чтении объекта, пока найден массив, или мне нужно добавить еще один вопрос? – ahmadalibaloch

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