不需要集成,所有的方法都在EasyEcho.java中,直接当工具类拷贝到项目中使用
通常,我们服务器获得json数据后,会需要解析为java bean对象,或解析为Map、List数据,再显示到页面上。 以下面这个json数据为例
{
"name": "小明",
"age": 15,
"sex": "男",
"home": "北京",
"hobby": "看电影",
"extra": "其他",
"grades": {
"chinese": 95,
"math": 100,
"english": 90,
"level": "优秀"
}
}
如果是解析为Map,则是Map嵌套Map的形式;如果是转为Java Bean,也很简单了,用Gson,GsonFormat插件直接生成Bean类。
但是无论哪种方式,都逃不了往页面上赋值这一繁琐步骤,要findViewById获取所有的控件,还要给所有的控件setText(我们公司做政府执法软件的,经常一个页面几十个录入项 T﹏T)。
使用EasyEcho就可以一行代码解决这个问题啦!<( ̄︶ ̄)>
当然这要求布局里id字符串(比如R.id.name,那这里说的id字符串就是"name")和服务器给的数据字段名称有联系,以例子来说,姓名这一项字段为"name",布局里的id字符串为"name"或是形如"tv_name"这种,只要可以根据数据字段转为id字符串,那就可以用。
把map型数据显示到页面上
- Map map:要显示到页面上的数据
- View parent:数据要显示的父布局,即决定了在哪个view上findViewById。
- IdStrConverterForMap idStrConverter:接口,需要实现convert方法,用于把map数据字段根据你自己的命名规则转为id字符串
根据一个默认map(模板map)把页面数据保存成map型
- Map defaultMap:默认的map,也相当于一个模板map,方法内所有的赋值均是在这个map上操作的,所以在这个方法执行完毕后,原来传入的map也改变了。事实上,返回的map就是这个defaultMap,Java是地址传递嘛。基于这个原因,建议每次调用这个方法时传入的defaultMap都是新生成的。
- View parent:要保存哪个父布局下的数据
- IdStrConverterForMap idStrConverter:id字符串转换器
把Bean型数据显示到页面上
- Object obj:要回显的数据,Java Bean实例
- View parent:数据要显示的父布局
- IdStrConverterForBean idStrConverter:id字符串转换器,注意这个是ForBean的,convert方法的第二个参数和ForMap的有所不同
(四)public static <T> T saveAsBean(Class<T> clazz, View parent, IdStrConverterForBean idStrConverter)
把页面数据保存成相应Bean类型
- Class<T> clazz:Java Bean类,要把页面数据保存成什么类型的实体类
- View parent:要保存哪个父布局下的数据
- IdStrConverterForBean idStrConverter:id字符串转换器
以上是四个主要方法,还有一些重载方法总体说一下,不再一一介绍
- 第二个参数除了可以传View,也可以传Activity,传Activity相当于显示(或保存)该activity根布局上的数据。
- 可以不传idStrConverter,不传的话默认数据的字段和id字符串是相等关系。
- 数据类型为Map时,echoMap和saveAsMap不回显(或保存)内部嵌套的其他集合类,如List、Set等,只有嵌套的是Map的时候才会递归操作内部Map。
- 数据类型为Bean时,echoBean和saveAsBean不回显(或保存)集合类(Collection和Map都不操作),对于基本类型和字符串会赋值到页面上,对于其他类型会当作Bean进行递归。
- 关于null,显示数据时,Map和Bean类型都不对null进行显示; 保存数据时,defaultMap中值为null的键值对无法进行赋值,因为要通过Entry.getValue().getClass()来获取map值的类型,进而赋值,如果是null,会导致空指针。
- 关于保存数据的默认值,比如例子中的"extra"字段,在我们的页面上是没有与之对应的TextView的,但是服务器又需要这个字段,就可以考虑设置默认值的方式。 在saveAsMap中,defaultMap里各个字段的值就是默认值,对于页面上没有控件的字段,会直接跳过不予赋值,也就是保持原来的值。 在saveAsBean中,默认值可以考虑在Bean实体类中给成员变量赋值,这样如果该属性在页面有与之对应的控件,就会用控件里的值将其覆盖;反之,没有对应的控件时会直接跳过。
- 保存数据时,数据类型有误时会赋值失败,比如"age"字段应该是int型的,可是却在控件中输入了"abc",这样就无法转成int型,所得到的Bean实例中age会保持为默认值。