現在、ネイティブのAndroid webViewフロントエンドを備えたアプリに取り組んでいます。
私のようなものがあります:
_public class dataObject
{
int a;
String b;
}
_
活動中
DataObjectの配列、たとえばdataObject x [5]を作成しました。
ここで、これら5つのdataObjectをコールバック関数でJSONとしてjavascript webViewインターフェイスに渡したいと思います。
私はインターネットを見ましたが、ほとんどのチュートリアルはfromJson()
の変換方法について話しているようです。 toJson()
についてはあまりありません。 dataObject.toJson()
が機能することを教えてくれるものを見つけました。
しかし、5つのdataObjectをすべて渡すにはどうすればよいですか?
オブジェクトのリストでGsonを使用する方法の包括的な例を次に示します。これは、exactlyJsonとの間の変換方法、リストの参照方法などを示す必要があります。
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;
}
}
}
コンパイルするには:
javac -cp "gson-2.1.jar:." Test.Java
そして最後にそれを実行します:
Java -cp "gson-2.1.jar:." Test
Windowsを使用している場合、前の2つのコマンドで:
を;
に切り替える必要があることに注意してください。
実行すると、次の出力が表示されます。
[{"a":0,"b":"zero"},{"a":1,"b":"one"},{"a":2,"b":"two"}]
a = 0, b = zero
a = 1, b = one
a = 2, b = two
これはdemonstrateのコマンドラインプログラムにすぎませんが、Android環境でも同じ原則が適用されることに注意してください(参照jar libsなど)
私のバージョンのヘルパークラスを使用したgsonリストの逆シリアル化:
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;
}
}
使用法
List<Object> objects = getList(Object.class, myJsonArray);