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

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

Info

Publication number
CN103902634B
CN103902634B CN201210590268.6A CN201210590268A CN103902634B CN 103902634 B CN103902634 B CN 103902634B CN 201210590268 A CN201210590268 A CN 201210590268A CN 103902634 B CN103902634 B CN 103902634B
Authority
CN
China
Prior art keywords
classes
viewitem
viewbean
data
database
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.)
Active
Application number
CN201210590268.6A
Other languages
English (en)
Other versions
CN103902634A (zh
Inventor
陈懿
陈皓
张伟
江洪
付立库
徐琳华
张健
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Aisino Corp
Original Assignee
Aisino Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Aisino Corp filed Critical Aisino Corp
Priority to CN201210590268.6A priority Critical patent/CN103902634B/zh
Publication of CN103902634A publication Critical patent/CN103902634A/zh
Application granted granted Critical
Publication of CN103902634B publication Critical patent/CN103902634B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases

Abstract

本发明提供了一种基于Android平台利用自定义Adapter实现View组件与数据库字段自动绑定的方法,包括、对数据库内容进行包装,根据应用的需要产生对应的ViewBean类,所述ViewBean类包含数据库的常用方法,还对外提供获取数据库内容的接口;创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定;创建自定义Adapter,继承BaseAdapter,通过所述ViewItem类和所述ViewBean类来实现数据库内容的显示和操作。使用本发明,当数据库结构或者布局文件发生改变,只需要修改Map映射即可,耦合性得到很大降低,设计的可复用性也得到很大提高。

Description

利用Adapter实现View组件与数据库字段自动绑定的方法
技术领域
本发明涉及数据库操作领域,具体地说,涉及一种基于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)throwsException{
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,String methodName,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)throwsException{
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 (3)

1.一种利用自定义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的数据字段自动绑定;
所述创建自定义Adapter,继承BaseAdapter,通过所述ViewItem类和所述ViewBean类来实现数据库内容的显示和操作,还包括:
创建一个ViewBean的列表ViewBeanList,添加相应的接口,实现对ViewBeanList的增加、删除、修改、以及查询操作。
2.根据权利要求1所述的利用自定义Adapter实现View组件与数据库字段自动绑定的方法,其特征在于,所述创建抽象ViewItem类,所述ViewItem类实现ViewItem组件ID与所述ViewBean类数据字段的自动绑定,还包括:
实际应用的ViewItem通过实现接口,完成ViewItem组件ID与ViewBean数据对应关系的Map构造。
3.根据权利要求1、2任一项所述的利用自定义Adapter实现View组件与数据库字段自动绑定的方法,其特征在于,当数据库结构或者布局文件发生改变,只需要修改Map映射即可。
CN201210590268.6A 2012-12-30 2012-12-30 利用Adapter实现View组件与数据库字段自动绑定的方法 Active CN103902634B (zh)

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 CN103902634A (zh) 2014-07-02
CN103902634B true 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)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
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商品列表的展示方法及系统
CN108804087B (zh) * 2017-04-26 2022-06-21 武汉斗鱼网络科技有限公司 一种动态切换第三方程序库的实现方法及实现装置
CN109324731A (zh) * 2017-07-27 2019-02-12 环球智达科技(北京)有限公司 信息展现方法和装置
CN110750248B (zh) * 2018-07-23 2023-06-02 贵州白山云科技股份有限公司 一种用于传递现有组件的扩展信息的方法及装置
CN109542409B (zh) * 2018-11-28 2022-09-30 中国海洋石油集团有限公司 一种基于面向对象设计思想的存储方法及装置
US11256709B2 (en) 2019-08-15 2022-02-22 Clinicomp International, Inc. Method and system for adapting programs for interoperability and adapters therefor
CN111309325B (zh) * 2020-01-22 2023-08-18 上海钧正网络科技有限公司 一种第三方库引用的方法、装置及移动终端
CN112632185B (zh) * 2020-12-16 2023-05-09 浪潮云信息技术股份公司 一种基于cpu环境的多类型数据库同步方法、装置及设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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 新太科技股份有限公司 一种软件开发辅助工具包

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6801903B2 (en) * 2001-10-12 2004-10-05 Ncr Corporation Collecting statistics in a database system

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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)

* Cited by examiner, † Cited by third party
Title
"Android平台下通讯录的研究与开发";耿乙超;《万方》;20120929;第1-69页 *
"Android手机界面管理系统的设计与实现";孙晓宇;《中国优秀硕士学位论文全文数据库 信息科技辑》;20100615(第6期);第I138-147页 *

Also Published As

Publication number Publication date
CN103902634A (zh) 2014-07-02

Similar Documents

Publication Publication Date Title
CN103902634B (zh) 利用Adapter实现View组件与数据库字段自动绑定的方法
ES2381373T3 (es) Programación y ejecución orientadas por gráficos de productor
US7519969B2 (en) System and method for controlling user interface properties with data
Riehle et al. Dynamic object model
Noble Basic relationship patterns
EP1586993A2 (en) System and method for priority based binding
US8250533B2 (en) Reflection over objects
CN102073525A (zh) 基于Java平台的Web业务系统的动态升级方法及装置
US8201147B2 (en) Generic XAD processing model
Picco et al. Lights: a lightweight, customizable tuple space supporting context-aware applications
Van Cutsem et al. Linguistic symbiosis between event loop actors and threads
Sugrue Getting Started with UML
Ali Advanced IOS 4 Programming: Developing Mobile Applications for Apple IPhone, IPad, and IPod Touch
Kendall Aspect-oriented programming for role models
Aldrich et al. The Plaid language: Typed core specification
Bläser A component language for structured parallel programming
Singh Higher Order Combinators for Join Patterns using STM
US8793645B2 (en) Replacement of data element in a graph
Newman et al. Annotation-based diagrams for shared-data concurrency
Oprisan Aspect oriented implementation of design patterns using metadata
Späth APIs
Levinson Revisiting Objects and Rules
Orleans Ph. D. Thesis Proposal: A Next-Generation Collaborative Programming Language
CN116149648A (zh) 一种基于对象技术构建web前端应用的装置及方法
Simmonds Metrics for Migrating Distributed Applications

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