web-dev-qa-db-fra.com

Gson transforme un tableau d'objets de données en json - Android

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?

35
AbSoLution8

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.)

84
Marvin Pinto

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);
0
sagits