利用Adapter实现View组件与数据库字段自动绑定的方法

文档序号:6494277阅读:201来源:国知局
利用Adapter实现View组件与数据库字段自动绑定的方法
【专利摘要】本发明提供了一种基于Android平台利用自定义Adapter实现View组件与数据库字段自动绑定的方法,包括、对数据库内容进行包装,根据应用的需要产生对应的ViewBean类,所述ViewBean类包含数据库的常用方法,还对外提供获取数据库内容的接口;创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定;创建自定义Adapter,继承BaseAdapter,通过所述ViewItem类和所述ViewBean类来实现数据库内容的显示和操作。使用本发明,当数据库结构或者布局文件发生改变,只需要修改Map映射即可,耦合性得到很大降低,设计的可复用性也得到很大提高。
【专利说明】利用Adapter实现Vi ew组件与数据库字段自动绑定的方法
【技术领域】
[0001]本发明涉及数据库操作领域,具体地说,涉及一种基于Android平台利用自定义Adapter实现View组件与数据库字段自动绑定的方法。
【背景技术】
[0002]在Android中,Adapter是连接后端数据和前端显示的适配器接口,是数据和UI (View)之间一个重要的纽带。在常见的View(ListView, GridView)等地方都需要用到 Adapter, Android 提供的三种 Adapter 主要有 ArrayAdapter、SimpleAdapter 以及SimpIeCursorAdapterο
[0003]ArrayAdapter支持泛型操作,最为简单,只能展示一行字。有时候,列表显示的信息可能不止一个,而且我们通常还会往列表中添加类似按钮,图片的功能,故ArrayAdapter实用性不高。
[0004]SimpleAdapter有最好的扩充性,可以自定义出各种效果。使用SimpleAdapter的数据用一般都是HashMap构成的List, list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。实际运用时,需要按照不同应用构建该HashMap,开发耦合性和重复性较高。当数据源或者view组件变动时,修改变动较大。
[0005]SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和Π的id对应起来。如需要实现更复杂的Π也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。但是也存在与SimpleAdapter同样的问题。
[0006]列表通常会与数据库的内容关联起来,如果构建一套机制,能将数据库内容的不同字段与View组件ID自动绑定,并将对数据库内容的加载,修改,删除等操作与Activity直接剥离开来,代码的可重复使用性大大增强,耦合性大大降低,开发的难度和工作量会大大降低。

【发明内容】

[0007]有鉴于此,本发明提供了一种利用自定义Adapter实现View组件与数据库字段自动绑定的方法,包括:
[0008]对数据库内容进行包装,根据应用的需要产生对应的ViewBean类,所述ViewBean类包含数据库的常用方法,还对外提供获取数据库内容的接口 ;
[0009]创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定;
[0010]创建自定义Adapter,继承BaseAdapter,通过所述ViewItem类和所述ViewBean类来实现数据库内容的显示和操作。
[0011]所述对数据库内容进行包装,根据应用的需要产生对应的ViewBean类,所述ViewBean类包含数据库的常用方法,还对外提供获取数据库内容的接口,还包括:[0012]创建接口,提供数据库的各项操作;
[0013]应用层将需要显示的数据库内容通过实现该接口实现ViewBean,并提供ViewItem组件需要显示的数据源访问方式。
[0014]所述创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定,还包括:
[0015]通过遍历ViewItem组件ID与ViewBean数据对应关系的Map,利用Java的Reflection机制将ViewItem的组件ID与ViewBean的数据字段自动绑定。
[0016]所述创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定,还包括:
[0017]实际应用的ViewItem通过实现接口,完成ViewItem组件ID与ViewBean数据对应关系的Map构造。
[0018]所述创建自定义Adapter,继承BaseAdapter,通过所述ViewItem类和所述ViewBean类来实现数据库内容的显示和操作,还包括:
[0019]创建一个ViewBean的列表ViewBeanList,添加相应的接口,实现对ViewBeanList的增加、删除、修改、以及查询操作。
[0020]当数据库结构或者布局文件发生改变,只需要修改Map映射即可。
[0021]本发明具有如下优点:系统的耦合性得到很大降低,设计的可复用性也得到很大提高;可扩展性增强;将ListView与业务层数据处理剥离开来,进一步降低耦合性。
【专利附图】

【附图说明】
[0022]图1是本发明基于Android平台利用自定义Adapter实现View组件与数据库字段自动绑定的方法的实现机制图。
【具体实施方式】
[0023]下面将参考附图详细说明本发明。
[0024]图1是本发明基于Android平台利用自定义Adapter实现View组件与数据库字段自动绑定的方法的实现机制图。如图1所示,在Android中,Adapter是用来帮助填充数据的中间桥梁,比如通过它将数据填充到ListView, GridView, Gallery。而android提供了 几种 Adapter: ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter,ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter,SpinnerAdapter, WrapperLi stAdapter。根据数据来源形式的不同可以选择不同的Adapter,比如数据来源于一个 Arraylist 就使用 BaseAdapter, SimpleAdapter,而数据来源于通过查询数据库获得Cursor那就使用SimpleCursorAdapter。BaseAdapter是一个抽象类,通过继承他并实现较多的方法,具有很高的灵活性。本发明就是通过继承BaseAdapter,创建一些通用的自定义Adapter来实现数据库内容的显示和操作。实现方式如下:
[0025]首先对数据库DataBase内容进行包装,根据需要产生与其对应的ViewBean类。该ViewBean类除了包含数据库的常用方法,还对外提供获取数据库内容的接口,如用来ViewItem显示的字段。创建接口 Interface,提供数据库的各项操作。应用层将需要显示的数据库内容通过实现该接口实现ViewBean,并提供ViewItem组件需要显示的数据源访问方式。
[0026]创建抽象ViewItem类,该类实现ViewItem组件ID与ViewBean类数据字段的自动绑定。通过遍历ViewItem组件ID与ViewBean数据对应关系的Map,利用Java的Reflection机制将ViewItem的组件ID与ViewBean的数据字段自动绑定。实际应用的ViewItem通过实现接口,完成ViewItem组件ID与ViewBean数据对应关系的Map构造。
[0027]其中,上述的JAVA反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
[0028]Java反射机制主要提供了以下功能:在运行时分析类的能力,判断任意对象所属类,类中有哪些方法,有哪些成员变量;在运行时控查对象,比如,只写一个toStringO方法供所有的类使用;实现通用数组操作代码的功能。
[0029]1.得到某个对象的属性
[0030]lpublic Object getProperty(Object owner, String fieldName)throwsException{
[0031]2Class ownerClass=owner.getClass();
[0032]3
[0033]4Field field=ownerClass.getField(fieldName);
[0034]5
[0035]60bject property=field.get (owner);
[0036]7
[0037]8return property;
[0038]9}
[0039]Class ownerClass=owner.getClass():得到该对象的 Class。
[0040]Field f ield=ownerClass.getField (fieldName):通过 Class 得到类声明的属性。
[0041]Object property=field.get (owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。
[0042]2.得到某个类的静态属性
[0043]lpublic Object getStaticProperty(String className, String fieldName)
[0044]2throws Exception{
[0045]3Class ownerClass=Class.forName(className);
[0046]4
[0047]5Field field=ownerClass.getField(fieldName);
[0048]6
[0049]70bject property=field.get(ownerClass);
[0050]8
[0051]9return property;
[0052]10}[0053]Class ownerClass=Class.forName (className):首先得到这个类的 Class。
[0054]Fieldfield=ownerClass.getField (fieldName):和上面一样,通过 Class 得到类声明的属性。
[0055]Object property=field.get (ownerClass):这里和上面有些不同,因为该属性是静态的,所以直接从类的Class里取。
[0056]3.执行某对象的方法
[0057]lpublic Object invokeMethod(Object owner,String methodName, Object[]args)throws Exception{
[0058]2[0059]3Class ownerClass=owner.getClass ();
[0060]4
[0061]5Class [] argsClass=new Class [args.length];
[0062]6
[0063]7for (int i=0,j=args.length; i〈 j ; i++) {
[0064]8argsClass [i]=args [i].getClass ();
[0065]9}
[0066]10
[0067]IlMethod method=ownerClas s.getMethod(methodName, argsClass);
[0068]12
[0069]13return method, invoke (owner, args);
[0070]14}
[0071]Class owner—class=owner.getClass ():首先还是必须得到这个对象的 Class。
[0072]5~9行:配置参数的Class数组,作为寻找Method的条件。
[0073]Method method=ownerClass.getMethod (methodName, argsClass):通过 Method名和参数的Class数组得到要执行的Method。
[0074]method, invoke (owner, args):执行该 Method,invoke 方法的参数是执行这个方法的对象,和参数数组。返回值是Object,也既是该方法的返回值。
[0075]4.执行某个类的静态方法
[0076]lpublic Object invokeStaticMethod(String className, String methodName,
[0077]20b ject [] args) throws Exception {
[0078]3Class ownerClass=Class.forName(className);
[0079]4
[0080]5Class [] argsClass=new Class [args.length];
[0081]6
[0082]7for (int i=0,j=args.length; i〈 j ; i++) {
[0083]8argsClass [i]=args [i].getClass ();
[0084]9}
[0085]10
[0086]I!Method method=ownerClass.getMethod(methodName, argsClass);[0087]12
[0088]13return method, invoke (null, args);
[0089]14}
[0090]基本的原理和实例3相同,不同点是最后一行,invoke的一个参数是null,因为这是静态方法,不需要借助实例运行。
[0091]5.新建实例
[0092]I
[0093]2public Object newlnstance(String className, Object[]args)throwsException{
[0094]3Class newoneClass=Class.forName(className);
[0095]4
[0096]5Class[]argsClass=new Class[args.length];
[0097]6
[0098]7for (int i=0, j=args.length; i〈j ; i++) {
[0099]8argsClass[i]=args[i].getClass ();
[0100]9}
[0101]10
[0102]IlConstructor cons=newoneClass.getConstructor(argsClass);
[0103]12
[0104]13return cons, newlnstance (args);
[0105]14
[0106]15}
[0107]这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数,可以直接使用 newoneClass.newlnstance O 来实现。
[0108]Class newoneClass=Class.forName (className):第一步,得到要构造的实例的Class。
[0109]第5?第9行:得到参数的Class数组。
[0110]Constructor cons=newoneClass.getConstructor (argsClass):得至丨J构造子。
[0111]cons, newlnstance (args):新建实例。
[0112]6.判断是否为某个类的实例
[0113]lpublic boolean islnstance(Object obj, Class cls){
[0114]2return cls.1slnstance(obj);
[0115]3}
[0116]7.得到数组中的某个元素
[0117]lpublic Object getByArray(Object array, int index){
[0118]2return Array, get (array, index);
[0119]3}
[0120]其中,反射机制最重要的部分是允许你检查类的结构。java.lang.reflect包中的三个类Field, Method, Constructor类分别描述类的字段,方法和构造器,它们都有一个getName方法,用来返回相应条目的名称。
[0121]自定义Adapter通过ViewItem及ViewBean显示信息,按钮等,adapter实现修改,删除,刷新等操作,从而将应用于Activity与ListView分离开来。通过指定ViewItem和ViewBean完成显示。同时,仓Il建一个ViewBean的列表ViewBeanList,添加相应的接口,实现对ViewBeanList的增删改查等操作。因为ViewBean提供了接口实现与其对应的数据库操作,故完成ViewBeanList更新之前需要先完成与之对应的数据库的更新。这样,应用的业务层就与Activity及View剥离。
[0122]本发明的方法具有的优势的说明:通过Reflection机制将ViewBean和ViewItem组件ID自动绑定之后,当数据库结构或者布局文件发生改变,只需要修改Map映射即可,耦合性得到很大降低,设计的可复用性也得到很大提高。
[0123]可扩展性增强,只需要添加新的布局文件,配置好Map映射,即可在ListView中显示信息,以及各种功能按钮。
[0124]通过自定义Adapter对ViewBeanList的控制,将ListView与业务层数据处理剥离开来,进一步降低耦合性。如业务处理发生变化,只需要修改相应的Adapter即可。
[0125]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在被发明的保护范围之内。
【权利要求】
1.一种利用自定义Adapter实现View组件与数据库字段自动绑定的方法,其特征在于,包括: 对数据库内容进行包装,根据应用的需要产生对应的ViewBean类,所述ViewBean类包含数据库的常用方法,还对外提供获取数据库内容的接口 ; 创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定; 创建自定义Adapter,继承BaseAdapter,通过所述ViewItem类和所述ViewBean类来实现数据库内容的显示和操作。
2.根据权利要求1所述的利用自定义Adapter实现View组件与数据库字段自动绑定的方法,其特征在于,所述对数据库内容进行包装,根据应用的需要产生对应的ViewBean类,所述ViewBean类包含数据库的常用方法,还对外提供获取数据库内容的接口,还包括: 创建接口,提供数据库的各项操作; 应用层将需要显示的数据库内容通过实现该接口实现ViewBean,并提供ViewItem组件需要显示的数据源访问方式。
3.根据权利要求1所述的利用自定义Adapter实现View组件与数据库字段自动绑定的方法,其特征在于,所述创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定,还包括: 通过遍历ViewItem组件ID与ViewBean数据对应关系的Map,利用Java的Reflection机制将ViewItem的组件ID与ViewBean的数据字段自动绑定。
4.根据权利要求1所述的利用自定义Adapter实现View组件与数据库字段自动绑定的方法,其特征在于,所述创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定,还包括: 实际应用的ViewItem通过实现接口,完成ViewItem组件ID与ViewBean数据对应关系的Map构造。
5.根据权利要求1所述的利用自定义Adapter实现View组件与数据库字段自动绑定的方法,其特征在于,所述创建自定义Adapter,继承BaseAdapter,通过所述ViewItem类和所述ViewBean类来实现数据库内容的显示和操作,还包括: 创建一个ViewBean的列表ViewBeanList,添加相应的接口,实现对ViewBeanList的增加、删除、修改、以及查询操作。
6.根据权利要求1-4任一项所述的利用自定义Adapter实现View组件与数据库字段自动绑定的方法,其特征在于,当数据库结构或者布局文件发生改变,只需要修改Map映射即可。
【文档编号】G06F17/30GK103902634SQ201210590268
【公开日】2014年7月2日 申请日期:2012年12月30日 优先权日:2012年12月30日
【发明者】陈懿, 陈皓, 张伟, 江洪, 付立库, 徐琳华, 张健 申请人:航天信息股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1