CN103902634A - 利用Adapter实现View组件与数据库字段自动绑定的方法 - Google Patents
利用Adapter实现View组件与数据库字段自动绑定的方法 Download PDFInfo
- Publication number
- CN103902634A CN103902634A CN201210590268.6A CN201210590268A CN103902634A CN 103902634 A CN103902634 A CN 103902634A CN 201210590268 A CN201210590268 A CN 201210590268A CN 103902634 A CN103902634 A CN 103902634A
- Authority
- CN
- China
- Prior art keywords
- class
- viewitem
- viewbean
- database
- assembly
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种基于Android平台利用自定义Adapter实现View组件与数据库字段自动绑定的方法,包括、对数据库内容进行包装,根据应用的需要产生对应的ViewBean类,所述ViewBean类包含数据库的常用方法,还对外提供获取数据库内容的接口;创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定;创建自定义Adapter,继承BaseAdapter,通过所述ViewItem类和所述ViewBean类来实现数据库内容的显示和操作。使用本发明,当数据库结构或者布局文件发生改变,只需要修改Map映射即可,耦合性得到很大降低,设计的可复用性也得到很大提高。
Description
技术领域
本发明涉及数据库操作领域,具体地说,涉及一种基于Android平台利用自定义Adapter实现View组件与数据库字段自动绑定的方法。
背景技术
在Android中,Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter,Android提供的三种Adapter主要有ArrayAdapter、SimpleAdapter以及SimpleCursorAdapter。
ArrayAdapter支持泛型操作,最为简单,只能展示一行字。有时候,列表显示的信息可能不止一个,而且我们通常还会往列表中添加类似按钮,图片的功能,故ArrayAdapter实用性不高。
SimpleAdapter有最好的扩充性,可以自定义出各种效果。使用SimpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。实际运用时,需要按照不同应用构建该HashMap,开发耦合性和重复性较高。当数据源或者view组件变动时,修改变动较大。
SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。但是也存在与SimpleAdapter同样的问题。
列表通常会与数据库的内容关联起来,如果构建一套机制,能将数据库内容的不同字段与View组件ID自动绑定,并将对数据库内容的加载,修改,删除等操作与Activity直接剥离开来,代码的可重复使用性大大增强,耦合性大大降低,开发的难度和工作量会大大降低。
发明内容
有鉴于此,本发明提供了一种利用自定义Adapter实现View组件与数据库字段自动绑定的方法,包括:
对数据库内容进行包装,根据应用的需要产生对应的ViewBean类,所述ViewBean类包含数据库的常用方法,还对外提供获取数据库内容的接口;
创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定;
创建自定义Adapter,继承BaseAdapter,通过所述ViewItem类和所述ViewBean类来实现数据库内容的显示和操作。
所述对数据库内容进行包装,根据应用的需要产生对应的ViewBean类,所述ViewBean类包含数据库的常用方法,还对外提供获取数据库内容的接口,还包括:
创建接口,提供数据库的各项操作;
应用层将需要显示的数据库内容通过实现该接口实现ViewBean,并提供ViewItem组件需要显示的数据源访问方式。
所述创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定,还包括:
通过遍历ViewItem组件ID与ViewBean数据对应关系的Map,利用Java的Reflection机制将ViewItem的组件ID与ViewBean的数据字段自动绑定。
所述创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定,还包括:
实际应用的ViewItem通过实现接口,完成ViewItem组件ID与ViewBean数据对应关系的Map构造。
所述创建自定义Adapter,继承BaseAdapter,通过所述ViewItem类和所述ViewBean类来实现数据库内容的显示和操作,还包括:
创建一个ViewBean的列表ViewBeanList,添加相应的接口,实现对ViewBeanList的增加、删除、修改、以及查询操作。
当数据库结构或者布局文件发生改变,只需要修改Map映射即可。
本发明具有如下优点:系统的耦合性得到很大降低,设计的可复用性也得到很大提高;可扩展性增强;将ListView与业务层数据处理剥离开来,进一步降低耦合性。
附图说明
图1是本发明基于Android平台利用自定义Adapter实现View组件与数据库字段自动绑定的方法的实现机制图。
具体实施方式
下面将参考附图详细说明本发明。
图1是本发明基于Android平台利用自定义Adapter实现View组件与数据库字段自动绑定的方法的实现机制图。如图1所示,在Android中,Adapter是用来帮助填充数据的中间桥梁,比如通过它将数据填充到ListView,GridView,Gallery。而android提供了几种Adapter:ArrayAdapter,BaseAdapter,CursorAdapter,HeaderViewListAdapter,ListAdapter,ResourceCursorAdapter,SimpleAdapter,SimpleCursorAdapter,SpinnerAdapter,WrapperListAdapter。根据数据来源形式的不同可以选择不同的Adapter,比如数据来源于一个Arraylist就使用BaseAdapter,SimpleAdapter,而数据来源于通过查询数据库获得Cursor那就使用SimpleCursorAdapter。BaseAdapter是一个抽象类,通过继承他并实现较多的方法,具有很高的灵活性。本发明就是通过继承BaseAdapter,创建一些通用的自定义Adapter来实现数据库内容的显示和操作。实现方式如下:
首先对数据库DataBase内容进行包装,根据需要产生与其对应的ViewBean类。该ViewBean类除了包含数据库的常用方法,还对外提供获取数据库内容的接口,如用来ViewItem显示的字段。创建接口Interface,提供数据库的各项操作。应用层将需要显示的数据库内容通过实现该接口实现ViewBean,并提供ViewItem组件需要显示的数据源访问方式。
创建抽象ViewItem类,该类实现ViewItem组件ID与ViewBean类数据字段的自动绑定。通过遍历ViewItem组件ID与ViewBean数据对应关系的Map,利用Java的Reflection机制将ViewItem的组件ID与ViewBean的数据字段自动绑定。实际应用的ViewItem通过实现接口,完成ViewItem组件ID与ViewBean数据对应关系的Map构造。
其中,上述的JAVA反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能:在运行时分析类的能力,判断任意对象所属类,类中有哪些方法,有哪些成员变量;在运行时控查对象,比如,只写一个toString()方法供所有的类使用;实现通用数组操作代码的功能。
1.得到某个对象的属性
1public Object getProperty(Object owner,String fieldName)throws Exception{
2Class ownerClass=owner.getClass();
3
4Field field=ownerClass.getField(fieldName);
5
6Object property=field.get(owner);
7
8return property;
9}
Class ownerClass=owner.getClass():得到该对象的Class。
Field field=ownerClass.getField(fieldName):通过Class得到类声明的属性。
Object property=field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。
2.得到某个类的静态属性
1public Object getStaticProperty(String className,String fieldName)
2throws Exception{
3Class ownerClass=Class.forName(className);
4
5Field field=ownerClass.getField(fieldName);
6
7Object property=field.get(ownerClass);
8
9return property;
10}
Class ownerClass=Class.forName(className):首先得到这个类的Class。
Fieldfield=ownerClass.getField(fieldName):和上面一样,通过Class得到类声明的属性。
Object property=field.get(ownerClass):这里和上面有些不同,因为该属性是静态的,所以直接从类的Class里取。
3.执行某对象的方法
1public Object invokeMethod(Object owner,StringmethodName,Object[]args)throws Exception{
2
3Class ownerClass=owner.getClass();
4
5Class[]argsClass=new Class[args.length];
6
7for(int i=0,j=args.length;i<j;i++){
8argsClass[i]=args[i].getClass();
9}
10
11Method method=ownerClas s.getMethod(methodName,argsClass);
12
13return method.invoke(owner,args);
14}
Class owner_class=owner.getClass():首先还是必须得到这个对象的Class。
5~9行:配置参数的Class数组,作为寻找Method的条件。
Method method=ownerClass.getMethod(methodName,argsClass):通过Method名和参数的Class数组得到要执行的Method。
method.invoke(owner,args):执行该Method,invoke方法的参数是执行这个方法的对象,和参数数组。返回值是Object,也既是该方法的返回值。
4.执行某个类的静态方法
1public Object invokeStaticMethod(String className,String methodName,
2Object[]args)throws Exception{
3Class ownerClass=Class.forName(className);
4
5Class[]argsClass=new Class[args.length];
6
7for(int i=0,j=args.length;i<j;i++){
8argsClass[i]=args[i].getClass();
9}
10
11Method method=ownerClass.getMethod(methodName,argsClass);
12
13return method.invoke(null,args);
14}
基本的原理和实例3相同,不同点是最后一行,invoke的一个参数是null,因为这是静态方法,不需要借助实例运行。
5.新建实例
1
2public Object newInstance(String className,Object[]args)throws Exception{
3Class newoneClass=Class.forName(className);
4
5Class[]argsClass=new Class[args.length];
6
7for(int i=0,j=args.length;i<j;i++){
8argsClass[i]=args[i].getClass();
9}
10
11Constructor cons=newoneClass.getConstructor(argsClass);
12
13return cons.newInstance(args);
14
15}
这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数,可以直接使用newoneClass.newInstance()来实现。
Class newoneClass=Class.forName(className):第一步,得到要构造的实例的Class。
第5~第9行:得到参数的Class数组。
Constructor cons=newoneClass.getConstructor(argsClass):得到构造子。
cons.newInstance(args):新建实例。
6.判断是否为某个类的实例
1public boolean isInstance(Object obj,Class cls){
2return cls.isInstance(obj);
3}
7.得到数组中的某个元素
1public Object getByArray(Object array,int index){
2return Array.get(array,index);
3}
其中,反射机制最重要的部分是允许你检查类的结构。java.lang.reflect包中的三个类Field,Method,Constructor类分别描述类的字段,方法和构造器,它们都有一个getName方法,用来返回相应条目的名称。
自定义Adapter通过ViewItem及ViewBean显示信息,按钮等,adapter实现修改,删除,刷新等操作,从而将应用于Activity与ListView分离开来。通过指定ViewItem和ViewBean完成显示。同时,创建一个ViewBean的列表ViewBeanList,添加相应的接口,实现对ViewBeanList的增删改查等操作。因为ViewBean提供了接口实现与其对应的数据库操作,故完成ViewBeanList更新之前需要先完成与之对应的数据库的更新。这样,应用的业务层就与Activity及View剥离。
本发明的方法具有的优势的说明:通过Reflection机制将ViewBean和ViewItem组件ID自动绑定之后,当数据库结构或者布局文件发生改变,只需要修改Map映射即可,耦合性得到很大降低,设计的可复用性也得到很大提高。
可扩展性增强,只需要添加新的布局文件,配置好Map映射,即可在ListView中显示信息,以及各种功能按钮。
通过自定义Adapter对ViewBeanList的控制,将ListView与业务层数据处理剥离开来,进一步降低耦合性。如业务处理发生变化,只需要修改相应的Adapter即可。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在被发明的保护范围之内。
Claims (6)
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映射即可。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210590268.6A CN103902634B (zh) | 2012-12-30 | 2012-12-30 | 利用Adapter实现View组件与数据库字段自动绑定的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210590268.6A CN103902634B (zh) | 2012-12-30 | 2012-12-30 | 利用Adapter实现View组件与数据库字段自动绑定的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103902634A true CN103902634A (zh) | 2014-07-02 |
CN103902634B CN103902634B (zh) | 2017-09-29 |
Family
ID=50993961
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210590268.6A Active CN103902634B (zh) | 2012-12-30 | 2012-12-30 | 利用Adapter实现View组件与数据库字段自动绑定的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103902634B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105868270A (zh) * | 2016-03-17 | 2016-08-17 | 央广视讯传媒股份有限公司 | 基于反射机制的Android对象存储框架 |
CN106095821A (zh) * | 2016-06-01 | 2016-11-09 | 浪潮软件集团有限公司 | 一种通用表单配置管理方法 |
CN106919383A (zh) * | 2017-01-26 | 2017-07-04 | 武汉奇米网络科技有限公司 | 一种Android商品列表的展示方法及系统 |
CN108804087A (zh) * | 2017-04-26 | 2018-11-13 | 武汉斗鱼网络科技有限公司 | 一种动态切换第三方程序库的实现方法及实现装置 |
CN109324731A (zh) * | 2017-07-27 | 2019-02-12 | 环球智达科技(北京)有限公司 | 信息展现方法和装置 |
CN109542409A (zh) * | 2018-11-28 | 2019-03-29 | 中国海洋石油集团有限公司 | 一种基于面向对象设计思想的存储方法及装置 |
CN110750248A (zh) * | 2018-07-23 | 2020-02-04 | 贵州白山云科技股份有限公司 | 一种用于传递现有组件的扩展信息的方法及装置 |
CN111309325A (zh) * | 2020-01-22 | 2020-06-19 | 上海钧正网络科技有限公司 | 一种第三方库引用的方法、装置及移动终端 |
CN112632185A (zh) * | 2020-12-16 | 2021-04-09 | 浪潮云信息技术股份公司 | 一种基于cpu环境的多类型数据库同步方法、装置及设备 |
US11256709B2 (en) | 2019-08-15 | 2022-02-22 | Clinicomp International, Inc. | Method and system for adapting programs for interoperability and adapters therefor |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030088579A1 (en) * | 2001-10-12 | 2003-05-08 | Brown Douglas P. | Collecting statistics in a database system |
CN101171582A (zh) * | 2005-05-09 | 2008-04-30 | 阿玛得斯两合公司 | 用于从数据库生成xml文档的动态方法 |
CN101198927A (zh) * | 2005-06-27 | 2008-06-11 | 微软公司 | 受管自动化程序设计模型 |
CN102214092A (zh) * | 2010-10-11 | 2011-10-12 | 新太科技股份有限公司 | 一种软件开发辅助工具包 |
-
2012
- 2012-12-30 CN CN201210590268.6A patent/CN103902634B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030088579A1 (en) * | 2001-10-12 | 2003-05-08 | Brown Douglas P. | Collecting statistics in a database system |
CN101171582A (zh) * | 2005-05-09 | 2008-04-30 | 阿玛得斯两合公司 | 用于从数据库生成xml文档的动态方法 |
CN101198927A (zh) * | 2005-06-27 | 2008-06-11 | 微软公司 | 受管自动化程序设计模型 |
CN102214092A (zh) * | 2010-10-11 | 2011-10-12 | 新太科技股份有限公司 | 一种软件开发辅助工具包 |
Non-Patent Citations (2)
Title |
---|
孙晓宇: ""Android手机界面管理系统的设计与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
耿乙超: ""Android平台下通讯录的研究与开发"", 《万方》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105868270A (zh) * | 2016-03-17 | 2016-08-17 | 央广视讯传媒股份有限公司 | 基于反射机制的Android对象存储框架 |
CN106095821A (zh) * | 2016-06-01 | 2016-11-09 | 浪潮软件集团有限公司 | 一种通用表单配置管理方法 |
CN106919383A (zh) * | 2017-01-26 | 2017-07-04 | 武汉奇米网络科技有限公司 | 一种Android商品列表的展示方法及系统 |
CN108804087A (zh) * | 2017-04-26 | 2018-11-13 | 武汉斗鱼网络科技有限公司 | 一种动态切换第三方程序库的实现方法及实现装置 |
CN109324731A (zh) * | 2017-07-27 | 2019-02-12 | 环球智达科技(北京)有限公司 | 信息展现方法和装置 |
CN110750248A (zh) * | 2018-07-23 | 2020-02-04 | 贵州白山云科技股份有限公司 | 一种用于传递现有组件的扩展信息的方法及装置 |
CN109542409A (zh) * | 2018-11-28 | 2019-03-29 | 中国海洋石油集团有限公司 | 一种基于面向对象设计思想的存储方法及装置 |
US11256709B2 (en) | 2019-08-15 | 2022-02-22 | Clinicomp International, Inc. | Method and system for adapting programs for interoperability and adapters therefor |
US11714822B2 (en) | 2019-08-15 | 2023-08-01 | Clinicomp International, Inc. | Method and system for adapting programs for interoperability and adapters therefor |
CN111309325A (zh) * | 2020-01-22 | 2020-06-19 | 上海钧正网络科技有限公司 | 一种第三方库引用的方法、装置及移动终端 |
CN111309325B (zh) * | 2020-01-22 | 2023-08-18 | 上海钧正网络科技有限公司 | 一种第三方库引用的方法、装置及移动终端 |
CN112632185A (zh) * | 2020-12-16 | 2021-04-09 | 浪潮云信息技术股份公司 | 一种基于cpu环境的多类型数据库同步方法、装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN103902634B (zh) | 2017-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103902634A (zh) | 利用Adapter实现View组件与数据库字段自动绑定的方法 | |
US6851105B1 (en) | Method and system for generating, applying, and defining a pattern | |
ES2674140T3 (es) | Creación de símbolos inferidos a partir del uso de código | |
US7694272B2 (en) | Method, a language and a system for the definition and implementation of software solutions by using a visualizable computer executable modeling language | |
US7590614B2 (en) | Method, apparatus, and computer program product for implementing techniques for visualizing data dependencies | |
US7865844B2 (en) | Method and system for modifying properties of graphical user interface components | |
US20050268280A1 (en) | Encapsulating changes to a software application | |
US20080163161A1 (en) | Designtime services for multiple patterns | |
CN102541996A (zh) | 一种基于jdbc的数据访问层构建方法及装置 | |
US8122381B2 (en) | Context debugger | |
US8036857B2 (en) | Design modelling | |
EP1999581A2 (en) | System and method for providing class definitions in a dynamically typed array-based language | |
Hayder et al. | Object-Oriented Programming with PHP5 | |
US20130227520A1 (en) | Rapid process integration through visual integration and simple interface programming | |
CN109240690B (zh) | 一种数据表单的界面生成方法和装置 | |
US8135943B1 (en) | Method, apparatus, and computer-readable medium for generating a dispatching function | |
CN106445487B (zh) | 用于控制交互式组件的处理单元、软件以及方法 | |
Plášil et al. | Inheriting synchronization protocols via sound enrichment rules | |
Senthil et al. | An improved component model for component based software engineering | |
Barbaric | Design patterns in object-oriented ABAP | |
Savidis et al. | Automated user interface engineering with a pattern reflecting programming language | |
Gopinath | Real-time UML to XMI conversion | |
Singh et al. | An Application of UML for Road Traffic Management System by Implementing Extensive Mechanism: Stereotypes | |
Ludin | Learn BlackBerry 10 App Development: A Cascades-Driven Approach | |
Kartaltepe et al. | JOVA: Java Object Viewing Aid |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |