package by.istin.android.xcore.gson.external; import android.content.ContentValues; import by.istin.android.xcore.gson.ContentValuesAdapter; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Created with IntelliJ IDEA. * User: IstiN * Date: 25.10.13 * Time: 18.26 */ public class ArrayAdapter<T> extends TypeAdapter<List<T>> { private final ContentValuesAdapter contentValuesAdapter; private final Class<T> adapterclass; public ArrayAdapter(Class<T> adapterclass, ContentValuesAdapter contentValuesAdapter) { this.adapterclass = adapterclass; this.contentValuesAdapter = contentValuesAdapter; } public List<T> read(JsonReader reader) throws IOException { List<T> list = new ArrayList<T>(); Gson gson = new GsonBuilder() .registerTypeHierarchyAdapter(ContentValues.class, contentValuesAdapter) .registerTypeAdapterFactory(new ArrayAdapterFactory(contentValuesAdapter)) .create(); if (reader.peek() == JsonToken.BEGIN_OBJECT) { T inning = gson.fromJson(reader, adapterclass); list.add(inning); } else if (reader.peek() == JsonToken.BEGIN_ARRAY) { reader.beginArray(); while (reader.hasNext()) { T inning = gson.fromJson(reader, adapterclass); list.add(inning); } reader.endArray(); } return list; } public void write(JsonWriter writer, List<T> value) throws IOException { } }