基於Android的Gson源碼閱讀心得

Gson是一個可以將json字符串轉化爲jsonObject、class對象的類庫。可以作用於任意的Java對象,包括完整的泛型支持。
1、搭建Android工程demo

引進Gson包


Android studio新建工程,在app下面的build.gradle中添加:

compile 'com.google.code.gson:gson:2.7'

2、讀取本地Json文件


3、創建子線程
讀取Json文件,並採用Gson庫中的接口,對其進行解析


4、在UI 主線程中採用Handle獲取解析的數據進行展示

5、源碼說明:

使用接觸最多的就是Gson和GsonBuilder類。

其中,GsonBuilder就是Gson的builder類,採用建造者模式方式,來簡化Gson構造方法需要的參數。

Gson構造方法如下:

GsonBuilder類內容進行說明:

private Excluder excluder = Excluder.DEFAULT;
用於配置一些不希望被轉換成JSON格式的對象的成員變量

private LongSerializationPolicy longSerializationPolicy = LongSerializationPolicy.DEFAULT;
private FieldNamingStrategy fieldNamingPolicy = FieldNamingPolicy.IDENTITY;
private final Map<Type, InstanceCreator<?>> instanceCreators
    = new HashMap<Type, InstanceCreator<?>>();
private final List<TypeAdapterFactory> factories = new ArrayList<TypeAdapterFactory>();

Gson類說明:

是最常使用的對象,包括:

public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException
public static <T> T jsonStringToClass(String jsonString, Class<T> tClass

public String toJson(Object src)
構造函數中就是將參數列表中的對象配置爲成員變量

TypeAdapterFactory的操作如下:

List<TypeAdapterFactory> factories = new ArrayList<TypeAdapterFactory>();

// built-in type adapters that cannot be overridden
factories.add(TypeAdapters.JSON_ELEMENT_FACTORY);
factories.add(ObjectTypeAdapter.FACTORY);

// the excluder must precede all adapters that handle user-defined types
factories.add(excluder);

// user's type adapters
factories.addAll(typeAdapterFactories);

// type adapters for basic platform types
factories.add(TypeAdapters.STRING_FACTORY);
factories.add(TypeAdapters.INTEGER_FACTORY);
factories.add(TypeAdapters.BOOLEAN_FACTORY);
factories.add(TypeAdapters.BYTE_FACTORY);
factories.add(TypeAdapters.SHORT_FACTORY);
TypeAdapter<Number> longAdapter = longAdapter(longSerializationPolicy);
factories.add(TypeAdapters.newFactory(long.class, Long.class, longAdapter));
factories.add(TypeAdapters.newFactory(double.class, Double.class,
        doubleAdapter(serializeSpecialFloatingPointValues)));
factories.add(TypeAdapters.newFactory(float.class, Float.class,
        floatAdapter(serializeSpecialFloatingPointValues)));

此處,factories預先記載了很多基本類型轉換組件的Factory,factories.addAll(typeAdapterFactories)是添加構造函數中傳入的用戶自定義的TypeAdapterFactory

TypeAdapters

抽象類,提供了兩個抽象函數作爲hook函數來讓用戶重載

TypeAdapterFactory

是一個接口

<T> TypeAdapter<T> create(Gson gson, TypeToken<T> type);
TypeAdapters
定義了幾乎所有的基礎類型的TypeAdapter和Factory

fromJson()

只要分爲三個步驟:
TypeToken<T> typeToken = (TypeToken<T>) TypeToken.get(typeOfT);//獲得要轉換類型對應的TypeToken對象
TypeAdapter<T> typeAdapter = getAdapter(typeToken);//通過type來獲得Adapter
T object = typeAdapter.read(reader);//通過typeAdapter來轉換對象

toJson

toJson和fromJson很像,就是獲得相應的TypeAdapter,只不過這次調用的是write方法



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章