先貼地址:https://github.com/AnotherJack/EasyEchoDemo
集成方法
不需要集成,所有的方法都在EasyEcho.java中,直接當(dāng)工具類拷貝到項(xiàng)目中使用
主要功能介紹
通常略步,我們服務(wù)器獲得json數(shù)據(jù)后,會(huì)需要解析為java bean對(duì)象定页,或解析為Map趟薄、List數(shù)據(jù),再顯示到頁(yè)面上典徊。
以下面這個(gè)json數(shù)據(jù)為例
{
"name": "小明",
"age": 15,
"sex": "男",
"home": "北京",
"hobby": "看電影",
"extra": "其他",
"grades": {
"chinese": 95,
"math": 100,
"english": 90,
"level": "優(yōu)秀"
}
}
如果是解析為Map杭煎,則是Map嵌套Map的形式;如果是轉(zhuǎn)為Java Bean卒落,也很簡(jiǎn)單了羡铲,用Gson,GsonFormat插件直接生成Bean類儡毕。
但是無(wú)論哪種方式犀勒,都逃不了往頁(yè)面上賦值這一繁瑣步驟,要findViewById獲取所有的控件妥曲,還要給所有的控件setText(我們公司做政府執(zhí)法軟件的贾费,經(jīng)常一個(gè)頁(yè)面幾十個(gè)錄入項(xiàng) T﹏T)。
使用EasyEcho就可以一行代碼解決這個(gè)問(wèn)題啦檐盟!<( ̄︶ ̄)>
當(dāng)然這要求布局里id字符串(比如R.id.name褂萧,那這里說(shuō)的id字符串就是"name")和服務(wù)器給的數(shù)據(jù)字段名稱有聯(lián)系,以例子來(lái)說(shuō)葵萎,姓名這一項(xiàng)字段為"name"导犹,布局里的id字符串為"name"或是形如"tv_name"這種,只要可以根據(jù)數(shù)據(jù)字段轉(zhuǎn)為id字符串羡忘,那就可以用谎痢。
方法介紹
(一)public static void echoMap(Map map, View parent, IdStrConverterForMap idStrConverter)
作用
把map型數(shù)據(jù)顯示到頁(yè)面上
返回值 void
參數(shù)介紹
1.Map map:要顯示到頁(yè)面上的數(shù)據(jù)
2.View parent:數(shù)據(jù)要顯示的父布局,即決定了在哪個(gè)view上findViewById卷雕。
3.IdStrConverterForMap idStrConverter:接口节猿,需要實(shí)現(xiàn)convert方法,用于把map數(shù)據(jù)字段根據(jù)你自己的命名規(guī)則轉(zhuǎn)為id字符串
(二)public static Map saveAsMap(Map defaultMap, View parent, IdStrConverterForMap idStrConverter)
作用
根據(jù)一個(gè)默認(rèn)map(模板map)把頁(yè)面數(shù)據(jù)保存成map型
返回值 Map
參數(shù)介紹
1.Map defaultMap:默認(rèn)的map漫雕,也相當(dāng)于一個(gè)模板map滨嘱,方法內(nèi)所有的賦值均是在這個(gè)map上操作的,所以在這個(gè)方法執(zhí)行完畢后浸间,原來(lái)傳入的map也改變了太雨。事實(shí)上,返回的map就是這個(gè)defaultMap魁蒜,Java是地址傳遞嘛囊扳。基于這個(gè)原因兜看,建議每次調(diào)用這個(gè)方法時(shí)傳入的defaultMap都是新生成的锥咸。
2.View parent:要保存哪個(gè)父布局下的數(shù)據(jù)
3.IdStrConverterForMap idStrConverter:id字符串轉(zhuǎn)換器
(三)public static void echoBean(Object obj, View parent, IdStrConverterForBean idStrConverter)
作用
把Bean型數(shù)據(jù)顯示到頁(yè)面上
返回值 void
參數(shù)介紹
1.Object obj:要回顯的數(shù)據(jù),Java Bean實(shí)例
2.View parent:數(shù)據(jù)要顯示的父布局
3.IdStrConverterForBean idStrConverter:id字符串轉(zhuǎn)換器铣减,注意這個(gè)是ForBean的她君,convert方法的第二個(gè)參數(shù)和ForMap的有所不同
(四)public static <T> T saveAsBean(Class<T> clazz, View parent, IdStrConverterForBean idStrConverter)
作用
把頁(yè)面數(shù)據(jù)保存成相應(yīng)Bean類型
返回值 即為第一個(gè)參數(shù)傳的Class類型的實(shí)例
參數(shù)介紹
1.Class<T> clazz:Java Bean類,要把頁(yè)面數(shù)據(jù)保存成什么類型的實(shí)體類
2.View parent:要保存哪個(gè)父布局下的數(shù)據(jù)
3.IdStrConverterForBean idStrConverter:id字符串轉(zhuǎn)換器
其他重載方法
以上是四個(gè)主要方法葫哗,還有一些重載方法總體說(shuō)一下缔刹,不再一一介紹
1.第二個(gè)參數(shù)除了可以傳View,也可以傳Activity劣针,傳Activity相當(dāng)于顯示(或保存)該activity根布局上的數(shù)據(jù)校镐。
2.可以不傳idStrConverter,不傳的話默認(rèn)數(shù)據(jù)的字段和id字符串是相等關(guān)系捺典。
注意事項(xiàng)
1.數(shù)據(jù)類型為Map時(shí)鸟廓,echoMap和saveAsMap不回顯(或保存)內(nèi)部嵌套的其他集合類,如List、Set等引谜,只有嵌套的是Map的時(shí)候才會(huì)遞歸操作內(nèi)部Map牍陌。
2.數(shù)據(jù)類型為Bean時(shí),echoBean和saveAsBean不回顯(或保存)集合類(Collection和Map都不操作)员咽,對(duì)于基本類型和字符串會(huì)賦值到頁(yè)面上毒涧,對(duì)于其他類型會(huì)當(dāng)作Bean進(jìn)行遞歸。
3.關(guān)于null贝室,顯示數(shù)據(jù)時(shí)契讲,Map和Bean類型都不對(duì)null進(jìn)行顯示;
保存數(shù)據(jù)時(shí)滑频,defaultMap中值為null的鍵值對(duì)無(wú)法進(jìn)行賦值捡偏,因?yàn)橐ㄟ^(guò)Entry.getValue().getClass()來(lái)獲取map值的類型,進(jìn)而賦值峡迷,如果是null银伟,會(huì)導(dǎo)致空指針。
4.關(guān)于保存數(shù)據(jù)的默認(rèn)值凉当,比如例子中的"extra"字段枣申,在我們的頁(yè)面上是沒(méi)有與之對(duì)應(yīng)的TextView的,但是服務(wù)器又需要這個(gè)字段看杭,就可以考慮設(shè)置默認(rèn)值的方式忠藤。
在saveAsMap中,defaultMap里各個(gè)字段的值就是默認(rèn)值楼雹,對(duì)于頁(yè)面上沒(méi)有控件的字段模孩,會(huì)直接跳過(guò)不予賦值,也就是保持原來(lái)的值贮缅。
在saveAsBean中榨咐,默認(rèn)值可以考慮在Bean實(shí)體類中給成員變量賦值,這樣如果該屬性在頁(yè)面有與之對(duì)應(yīng)的控件谴供,就會(huì)用控件里的值將其覆蓋块茁;反之,沒(méi)有對(duì)應(yīng)的控件時(shí)會(huì)直接跳過(guò)桂肌。
5.保存數(shù)據(jù)時(shí)数焊,數(shù)據(jù)類型有誤時(shí)會(huì)賦值失敗,比如"age"字段應(yīng)該是int型的崎场,可是卻在控件中輸入了"abc"佩耳,這樣就無(wú)法轉(zhuǎn)成int型,所得到的Bean實(shí)例中age會(huì)保持為默認(rèn)值谭跨。