2016-05-02 6 views
1

Meine JSON-Daten wie folgt aussehen vom Server apifehlgeschlagen Realmlist <Realmlist <RealmInt>> in Realm.io

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

I durch RealmList<RealmInt> die Arrays von Integer oder String verarbeiten kann erfolgreich zu handhaben, aber dieses Mal hat ich konnte nicht mit einem Fehler, weil RealmList> nicht unterstützt wird. "Type parameter 'io.realm.realmList' is not within its bounds...."

Für RealmInt siehe this link.

Ich habe versucht, es zu lösen RealmList<RealmLista> mit dem RealmLista von RealmObject erstreckt und eine RealmList wie diese

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

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

}

und erstellt dann eine RealmListaTypeAdapter und hinzugefügt, um es zu Gson aber wenn Gson expects an Object (RealmLista) but is found array Deserialisieren, wie Die oben gezeigten Daten vom Server sind offensichtlich.

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

Gibt es eine Möglichkeit, eine einfache List<List<Integer>> zu speichern, indem zu RealmObject jeglicher Art Umwandlung beim Speichern, List<List<Integer>> wird leicht durch Gson umgewandelt. : -/

+0

[Dies funktioniert für nur 'Realmlist ] (https: //gist.github .com/cmelchior/1a97377df0c49cd4fca9), aber Sie benötigen ein neues Objekt, das eine 'RealmList' von Realms speichert, wenn Sie ein Array von ihnen speichern wollen. – EpicPandaForce

Antwort

1

Realm unterstützt derzeit keine Listenlisten. Siehe https://github.com/realm/realm-java/issues/2549.

Also @ EpicPandaForce Idee zum Erstellen eines RealmObject, das diese innere Liste enthält, ist wahrscheinlich die beste Workaround.

Es könnte wie folgt aussehen:

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

Die richtige Verbindung für den Kern sein sollte: https://gist.github.com/cmelchior/1a97377df0c49cd4fca9

+0

Ich mache es schon. Das Problem ist mit Gson. Es akzeptiert kein Objekt (mit Array), wo ich ein direktes Array erhalte. – ahmadalibaloch

+0

Es klingt, als ob Sie einen benutzerdefinierten GSON Deserializer erstellen sollten. Es gibt ein Beispiel im Kern. –

+0

Kannst du meinen Adapter in der Frage sehen, sehe ich ein Problem beim Lesen von Object, während Array gefunden wird oder ich eine weitere Frage hinzufügen muss? – ahmadalibaloch