Actuellement, je travaille sur une application native Android avec l'interface WebView.
J'ai quelque chose comme:
public class dataObject
{
int a;
String b;
}
et en activité,
J'ai créé un tableau de dataObject, disons dataObject x [5];
Maintenant, je veux passer ces 5 dataObject à mon interface javascript webView en tant que JSON dans une fonction de rappel.
J'ai regardé sur Internet, il semble que la plupart des tutoriels parlent de la façon de convertir fromJson()
. Il n'y a pas grand-chose sur toJson()
. J'en ai trouvé un qui m'a appris que dataObject.toJson()
, fonctionnerait.
Mais comment passer les 5 dataObjects?
Voici un exemple complet sur la façon d'utiliser Gson avec une liste d'objets. Cela devrait montrer exactement comment convertir vers/depuis Json, comment référencer des listes, etc.
Test.Java:
import com.google.gson.Gson;
import Java.util.List;
import Java.util.ArrayList;
import com.google.gson.reflect.TypeToken;
import Java.lang.reflect.Type;
public class Test {
public static void main (String[] args) {
// Initialize a list of type DataObject
List<DataObject> objList = new ArrayList<DataObject>();
objList.add(new DataObject(0, "zero"));
objList.add(new DataObject(1, "one"));
objList.add(new DataObject(2, "two"));
// Convert the object to a JSON string
String json = new Gson().toJson(objList);
System.out.println(json);
// Now convert the JSON string back to your Java object
Type type = new TypeToken<List<DataObject>>(){}.getType();
List<DataObject> inpList = new Gson().fromJson(json, type);
for (int i=0;i<inpList.size();i++) {
DataObject x = inpList.get(i);
System.out.println(x);
}
}
private static class DataObject {
private int a;
private String b;
public DataObject(int a, String b) {
this.a = a;
this.b = b;
}
public String toString() {
return "a = " +a+ ", b = " +b;
}
}
}
Pour le compiler:
javac -cp "gson-2.1.jar:." Test.Java
Et enfin pour l'exécuter:
Java -cp "gson-2.1.jar:." Test
Notez que si vous utilisez Windows, vous devrez basculer :
Avec ;
Dans les deux commandes précédentes.
Après l'avoir exécuté, vous devriez voir la sortie suivante:
[{"a":0,"b":"zero"},{"a":1,"b":"one"},{"a":2,"b":"two"}]
a = 0, b = zero
a = 1, b = one
a = 2, b = two
Gardez à l'esprit qu'il ne s'agit que d'un programme en ligne de commande pour montrer comment cela fonctionne, mais les mêmes principes s'appliquent dans l'environnement Android (référence bibliothèques de bocaux, etc.)
Ma version de désérialisation de la liste gson à l'aide d'une classe d'assistance:
public List<E> getList(Class<E> type, JSONArray json) throws Exception {
Gson gsonB = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
return gsonB.fromJson(json.toString(), new JsonListHelper<E>(type));
}
public class JsonListHelper<T> implements ParameterizedType {
private Class<?> wrapped;
public JsonListHelper(Class<T> wrapped) {
this.wrapped = wrapped;
}
public Type[] getActualTypeArguments() {
return new Type[] {wrapped};
}
public Type getRawType() {
return List.class;
}
public Type getOwnerType() {
return null;
}
}
tilisation
List<Object> objects = getList(Object.class, myJsonArray);