技术
JSON:一种轻量级的数据交换格式。有两种结构:键值对集合和无序的值列表
主要5中数据形式:number、string、array、value、object
JSON 语法规则
JSON是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面名。
JSON是一个序列化的对象或数组。
1. 六个构造字符:
begin-array = ws %x5B ws ; [ 左方括号
begin-object = ws %x7B ws ; { 左大括号
end-array = ws %x5D ws ; ] 右方括号
end-object = ws %x7D ws ; } 右大括号
name-separator = ws %x3A ws ; : 冒号
value-separator = ws %x2C ws ; , 逗号
2. 在这六个构造字符的前或后允许存在无意义的空白符(ws):
ws = *(%x20 /; 空间
%x09 /; 水平标签
%x0A /; 换行或换行
%x0D); 回程
3.JSON的值:
3.1 JSON的构成: ws 值 ws [1]
3.2 值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。
3.2.1对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成,
{"name"
: "John Doe"
, "age"
: 18, "address"
: {"country"` `:
"china",
"zip-code":
"10000"``}}
3.2.2数组是由方括号括起来的一组值构成,如:
[3, 1, 4, 1, 5, 9, 2, 6]
3.2.3 字符串与C或者Java的字符串非常相似。字符串是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
3.2.4数字也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。
适配器Adapter:适配器是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口。
Adapter(适配器):将各种数据以合适的形式显示到View上,提供给用户看
MVC模式:M(model数据)->C(controller控制器 以什么方式显示到)->V(View视图、用户界面)
适配器的继承结构
实际开发中用到的Adapter:
BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter!
ArrayAdapter:支持泛型操作,最简单的一个Adapter,只能展现一行文字~
SimpleAdapter:同样具有良好扩展性的一个Adapter,可以自定义多种效果!
SimpleCursorAdapter:用于显示简单文本类型的listView,一般在数据库那里会用到,不过有点过时, 不推荐使用!
Adapter定义:
继承 BaseAdapter (可在继承的时候指定泛型,扩展使用);
重写四个基本方法:
1、getCount():获取数据的总的数量,返回 int 类型的结果;
2、getItem(int position) :获取指定位置的数据,返回该数据;
3、getItemId(int position):获取指定位置数据的id,返回该数据的id,一般以数据所在的位置作为它的id;
4、getView(int position,View convertView,ViewGroup parent):关键方法,用于确定列表项创建 ViewHolder (包含列表项的控件)
ViewHolder减少findViewById()的使用以及避免过多的inflate view(加载视图)
Fragment:一种可以嵌入在活动中的UI片段,能够让程序更加合理和充分地利用大屏幕的空间,出现的初衷是为了适应大屏幕的平板电脑,可以将其看成一个小型Activity,又称作Activity片段。
使用Fragment可以把屏幕划分成几块,然后进行分组,进行一个模块化管理。Fragment不能够单独使用,需要嵌套在Activity中使用,其生命周期也受到宿主Activity的生命周期的影响
Fragment的优势:
模块化(Modularity):我们不必把所有代码全部写在Activity中,而是把代码写在各自的Fragment中。
可重用(Reusability):多个Activity可以重用一个Fragment。
可适配(Adaptability):根据硬件的屏幕尺寸、屏幕方向,能够方便地实现不同的布局,这样用户体验更好。
fragment生命周期
Fragment的使用:
1、静态加载
定义Fragment的xml布局文件
自定义Fragment类,继承Fragment类或其子类,同时实现onCreate()方法,在方法中,通过inflater.inflate加载布局文件,接着返回其View
在需要加载Fragment的Activity对应布局文件中<fragment>的name属性设为全限定类名,即包名.fragment
最后在Activity调用setContentView()加载布局文件即可
静态加载一旦添加就不能够在运行时删除
2、动态加载
获得FragmentManager对象,通过getSupportFragmentManager()
获得FragmentTransaction对象,通过fm.beginTransaction()
调用add()方法或者repalce()方法加载Fragment;
最后调用commit()方法提交事务
注意点:
inflate第三个参数是false,因为在内部实现中要把fragment添加到container中,如果设置为true将会被重复添加
如果在创建Fragment时要传入参数,必须要通过setArguments(Bundle bundle)方式添加,而不建议通过为Fragment添加带参数的构造函数,因为通过setArguments()方式添加,在由于内存紧张导致Fragment被系统杀掉并恢复(re-instantiate)时能保留这些数据
可以在Fragment的onAttach()中通过getArguments()获得传进来的参数。如果要获取Activity对象,不建议调用getActivity(),而是在onAttach()中将Context对象强转为Activity对象
动态加载Fragment中,FragmentTransaction类提供了方法完成增删等操作,完成后调用FragmentTransaction.commit()方法提交修改
Gson是一个Java库,作用是将Java对象转换成它对应的JSON表示。
Gson目标
Gson库的关键类就是Gson,使用起来很简单,直接实例化 new Gson() 即可。它也可以通过GsonBuilder 类来实例化,进行一些初始化设置,初学时无需深入了解。
Gson实例是无状态的。所以多个JSON序列化和反序列操作完全可以重用一个Gson对象。
基本序列化方法
序列化是指将Java对象转换成JSON字符串,使用Gson.toJson(...)方法来进行序列化操作。
基本反序列化方法
反序列化是指将JSON字符串传换成Java对象,使用Gson.fromJson(...)方法来进行反序列化操作。反序列化要指定反序列化后的Java对象的类型。
序列化和反序列化中的注意点
对象的字段可以并推荐使用private。
无需使用注解指定哪些字段被包括在序列化和反序列化操作中。当前类,和它所有父类的所有字段都是默认包括的。
如果字段使用transient修饰,它被默认忽略,不
包含在序列化和反序列化操作中。
Gson可以正确处理null值。
序列化时,值为null的字段会被跳过。
反序列化时,JSON中缺失的项,其对象对应的字段会被设为null。
内部类、匿名类等隐含的外部类的字段会被忽略,不包含在序列化和反序列化中。
修改字段名:
使用@SerializeName注解自定义字段名;
使用FieldNamingPolicy来规定基本的命名策略;
JSP :动态网页开发技术,标签:<% %>
JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息
JavaBean:
JavaBean 与其它 Java 类相比而言独一无二的特征:
提供一个默认的无参构造函数。
需要被序列化并且实现了 Serializable 接口。
可能有一系列可读写属性。
可能有一系列的 getter 或 setter 方法。
JavaBean的属性是可以访问、可读写、只读或只写。通过getPropertyName()和setPropertyName()来访问。
如果JavaBean只读或者只写,则这个属性只提供get或set方法。
网友评论