基於Android的Gson原始碼閱讀心得

2021-07-28 12:05:15 字數 3128 閱讀 1093

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

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, instancecreator>> instancecreators

= new hashmap, instancecreator>>();

private final listfactories = new arraylist();

gson類說明:

是最常使用的物件,包括:

public 

t fromjson(string json, class classoft) throws jsonsyntaxexception

public static 

t jsonstringtoclass(string jsonstring, class tclass

public string tojson(object src)
建構函式中就是將引數列表中的物件配置為成員變數

typeadapte***ctory的操作如下:

listfactories = new arraylist();

// 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(typeadapte***ctories);

// 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

);typeadapterlongadapter = 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(typeadapte***ctories)是新增建構函式中傳入的使用者自定義的typeadapte***ctory

typeadapters

抽象類,提供了兩個抽象函式作為hook函式來讓使用者過載

typeadapte***ctory

是乙個介面

typeadapter create(gson gson, typetoken type);

typeadapters

定義了幾乎所有的基礎型別的typeadapter和factory

fromjson()

只要分為三個步驟:

typetoken typetoken = (typetoken) typetoken.get(typeoft);//獲得要轉換型別對應的typetoken物件

typeadapter typeadapter = getadapter(typetoken);//通過type來獲得adapter

t object = typeadapter.read(reader);//通過typeadapter來轉換物件

tojson

tojson和fromjson很像,就是獲得相應的typeadapter,只不過這次呼叫的是write方法

android開發之Gson的使用

gson是google提供的乙個json的處理工具類庫。import com.google.gson.gson import com.google.gson.reflect.typetoken 這個用於解析頂級為list的資料 1 資料 result code 0,result reason 2 建...

Android之推薦看的Android原始碼

handler message looper handler被稱為 非同步提交器 是android開發入門教程必定談及的東西,這也是activity等元件的工作機制需要用到的東西,是 資料驅動 框架的重要組成,作為閱讀原始碼的入門最適合不過。activity和service 作為經常使用到的元件,閱...

ConcurrentHahMap 基於原始碼解析

目錄 1 簡單總結 2 jdk1.7 segments hashentry陣列 鍊錶解析 3 jdk1.8 雜湊表 紅黑樹 cas 解析 參考 如下圖所示,segments繼承了可重入鎖reentrantlock,每個片段有乙個鎖,叫做 分段鎖 1 segment 分段鎖 concurrenthas...