Nun, ich habe das: Eine Reihe von Webservices, jeder Webservice gibt ein Array von einer Entität zurück. Gut!Java: Dynamischer Listentyp zum JServerarray
In meiner Android App rufe ich die Webservices an und erhalte die JSON String mit dem Array von Elementen.
Um es einige dynamisch ich ein Array mit den gegossenen Klassen Namen gemacht, Beispiel:
<item>com.company.package.Person</item>
<item>com.company.package.Animal</item>
<item>com.company.package.Thing</item>
// etc
Die Idee war:
Legen Sie das Array mit dem Namen der Klasse zu werfen die JSON
String[] entities = getResources().getStringArray(R.array.classNames);
ein Klasse-Typ Setzen Sie sich mit
Class.forName(...)
Class<?> object = Class.forName(entities[y]);
Immer die Web Service gibt einen Array, dann mag ich, wie dieses
//see the **object**, this was my idea but doesn't work Type type = new TypeToken<List<**object**>() {}.getType(); List<**object**> array = gson.fromJson(jsonArrayString, type);
irgendeine Weise die Json zu Java Liste konvertieren, dies zu tun?
Dies funktioniert
ich einen Weg, es
schreiben meine eigene ParameterizedType
Liste zu tun gefunden (@ andersschuller Antwort) und mit diesem
Class<?> clazz = Class.forName(entities[y]);
Type type = new ParameterizedTypeList(clazz.newInstance().getClass());
List<? extends Object> array = SystemUtils.factoryGson().fromJson(datos.get(y).toString(), type);
Mein Problem wurde gelöst mit 3 Zeilen (vielleicht weniger als das)
Hoffen Sie, dass jemand hilft!
ich Ihre Frage falsch verstanden haben, aber Sie brauchen nicht ein Typ e zum Deserialisieren von JSonsachen. Sie können auch normale Klassen verwenden. siehe [link] (https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/Gson.html # fromJson (java.lang.String,% 20java.lang.Class)) – Distjubo
Auch [Klasse] (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class .html) implementiert [Type] (https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Type.html). – Distjubo