1、Android移动平台的客户关系管理系统Android实训项目教程第1章基于Android移动平台的客户关系管理系统本章重点&Android布局&Activity与Activity之间的跳转&ListView控件和CursorAdapter使用&Android对话框&SQLite数据库&ContentProvider使用1.1 实训目的通过这个项目的学习,使学员掌握Android平台中的ListView、Activity、Activity的跳转、Button、TextView、EditView、Adatper和Dialog等有关UI技术,熟悉嵌入式数据库SQLite、以及Android的数据持
2、久化技术SQLiteOpenHelper和Content Provider等技术,并能掌握adb等Android调试工具的使用。此外,通过完成一个完整的项目使学员了解软件开发周期过程、UML常用元素的含义,更能够增强学员的团队合作精神,培养学员的沟通能力,学会自我管理。1.2 项目任务概述1.2.1 项目背景随着移动设备处理能力的增强,用户手机中存放客户信息已是可能,3G版CRM(客户关系管理)能够在手机中存放客户信息,使用方便,节省时间,保密性强,携带方便。我们可以在任何时间地点查找客户信息,做到随时掌握客户信息。1.2.2 项目任务本项目实现在Android移动设备上管理客户信息。由于是移
3、动设备,所以使用起来方便快捷,可以随时随地的查找客户,查看相应的客户信息,也可以随时随地的添加客户信息,并对客户信息进行修改。客户信息存放在手机内的SQLite嵌入式数据库内。1.3 需求分析用户可以使用该系统实现客户信息的查询,增加,修改和删除,客户信息查看。1.3.1 总体用例图图11.3.2 客户信息查询用例图图21.3.3 客户信息查询业务流程图3用户通过点击桌面CRM图标进入客户关系管理系统,进入系统需要查询所有客户信息列表。查询功能是在这个列表页面点击“查询”菜单进入的,弹出条件输入对话框,在这个对话框中我们可以输入“客户名称”、“联系人”和“电话”进行查询,这三个条件都是进行的模
4、糊查询,并且是“与”关系。点击对话框“确定”则进行查询,并将查询的结果显示在列表页面,如果没有符合条件的数据则显示原来书籍列表信息。点击对话框“取消”则不进行查询,并保留原来的客户信息在列表页面中。1.3.4 客户信息添加用例图图41.3.5 客户信息添加业务流程图5用户通过点击桌面CRM图标进入客户关系管理系统,进入系统需要查询所有客户信息列表。添加功能是在这个列表页面点击“添加”菜单进入的,页面跳转到客户信息添加页面,在这个添加页面中我们可以输入“客户名称”、“联系人”、“电话”、“E-mail”、“传真”和“地址”信息,输入完成后点击“确定”按钮,可以将客户信息插入到数据库中,返回到列表
5、页面,并将查询的结果显示在列表页面。如果点击“取消”按钮返回到列表页面。1.3.6 客户信息删除用例图图61.3.7 客户信息删除业务流程图7用户通过点击桌面CRM图标进入客户关系管理系统,进入系统需要查询所有客户信息列表。删除功能是在这个列表页面中,选择XX客户信息长按事件,弹出一个“修改”和“删除”操作选择对话框。选择“删除”选项,删除数据库中的客户信息,返回列表页面并进行查询。1.3.8 客户信息修改用例图图81.3.9 客户信息修改业务流程图9用户通过点击桌面CRM图标进入客户关系管理系统,进入系统需要查询所有客户信息列表。修改功能是在这个列表页面中,选择XX客户信息长按事件,弹出一个
6、“修改”和“删除”操作选择对话框。选择“修改”选项,修改数据库中的客户信息,返回列表页面并进行查询。1.3.10 客户信息查看用例图图101.3.11 客户信息查看业务流程图11用户通过点击桌面CRM图标进入客户关系管理系统,进入系统需要查询所有客户信息列表。阅读功能是在这个列表页面中,选择XX客户信息短按事件,弹出一个客户信息查看对话框。点击“关闭”按钮关闭对话框,返回列表页面。1.4 系统设计1.4.1 客户信息查询UI列表页面示意图 图12 图131.4.2 客户信息查询UI列表页面项目说明1.ListView控件:每个ListView项中包含三个TextView控件,即“客户名称”、“
7、联系人”和“电话”,“客户名称”控件字体大小20dip、“联系人”控件字体大小15dip和“电话”控件字体大小15dip。2.Menu控件:有两个菜单项,即“查询”和“添加”。1.4.3 客户信息查询UI查询对话框示意图 图141.4.4 客户信息查询UI查询对话框项目说明1.Dailog控件:用户点击“查询”菜单则弹出“查询”对话框,包括:“客户名称”TextView、“客户名称”EditView、“联系人”TextView、“联系人”EditView控件、“电话”TextView、“电话”EditView控件,“确定”按钮和“取消”按钮。1.4.5 客户信息查询类图图15列表页面Activ
8、ity(CRMListActivity)需要继承,并重写onCreate、onCreateOptionsMenu和onOptionsItemSelected。onCreate方法是列表页面的初始化方法,在这个方法中我们要初始化页面中用到的ListView等控件信息。onCreateOptionsMenu方法是列表页面中初始化菜单信息。onOptionsItemSelected方法是列表页面中处理菜单点击事件。findAll方法是查询所有客户信息方法,该方法为私有方法。findByInfo方法是按照条件查询符合条件有客户信息方法,参数是clientname(客户名称)、linkman(联系人)和
9、phone(电话)都是String类型,该方法为私有方法。图16图的类图反映的是数据持久化部分的类图,事实上这部分类在客户信息删除、修改和添加等模块也都使用,在其它模块介绍中就不再介绍这些类了。DBHelper 类是数据库帮助类继承SQLiteOpenHelper类,在这个类中我们可以创建数据库中的表,当数据库版本变化的时候,可以删除旧版本的表再建立新版本的表。DBHelper方法是一个构造方法。onCreate方法是数据库的初始化方法,在这个方法中我们要初始化数据库中用到的表。onUpgrade 方法是数据库的更新方法,在这个方法中我们要比较数据库版本是否变化,如果数据库版本变化了则删除数据
10、库中的表,再重建表。DataProvider类是数据库操作类继承ContentProvider,在这个类中我们可以对数据库中的表实现CRUD(增加、查询、更新和删除)操作。onCreate方法是数据库操作类的初始化方法,在这个方法中我们要DBHelper类,以备在CRUD操作中使用。getType返回Content Provider的数据类型。insert插入数据方法。delete删除数据方法。query查询数据方法。update 更新数据方法。1.4.6 客户信息添加UI添加页面示意图 图17 图181.4.7 客户信息添加UI添加页面项目说明1.“客户名称”TextView控件,默认字体大
11、小。2.“客户名称”EditView控件,默认字体大小。3.“联系人”TextView控件,默认字体大小和样式。4.“联系人”EditView控件,默认字体大小和样式。5.“电话”TextView控件,默认字体大小和样式。6.“电话”EditView控件,默认字体大小和样式。7.“E-mail”TextView控件,默认字体大小。8.“E-mail”EditView控件,默认字体大小。9.“地址”TextView控件,默认字体大小和样式。10.“地址”EditView控件,默认字体大小和样式。11.“确定”按钮,默认字体大小和样式。12.“取消”按钮,默认字体大小和样式。1.4.8 客户信息添
12、加类图图19添加页面Activity(CRMAddActivity)需要继承,并重写onCreate。onCreate方法是添加页面的初始化方法,在这个方法中我们要初始化页面中用到的TextView、Button和EditView等控件信息。1.4.9 客户信息修改UI操作选择对话框示意图图201.4.10 客户信息修改UI操作选择对话框项目说明Dailog控件:用户长按XX客户信息项,弹出“操作选择”对话框,包括:“修改客户信息”和“删除客户信息”选择项。1.4.11 客户信息修改UI修改页面示意图图211.4.12 客户信息修改UI修改页面项目说明1.“客户名称”TextView控件,默认
13、字体大小。2.“客户名称”EditView控件,默认字体大小。3.“联系人”TextView控件,默认字体大小和样式。4.“联系人”EditView控件,默认字体大小和样式。5.“电话”TextView控件,默认字体大小和样式。6.“电话”EditView控件,默认字体大小和样式。7.“E-mail”TextView控件,默认字体大小。8.“E-mail”EditView控件,默认字体大小。9.“地址”TextView控件,默认字体大小和样式。10.“地址”EditView控件,默认字体大小和样式。11.“确定”按钮,默认字体大小和样式。12.“取消”按钮,默认字体大小和样式。1.4.13 客
14、户信息修改类图图22修改页面Activity(CRMModActivity)需要继承,并重写onCreate。onCreate方法是添加页面的初始化方法,在这个方法中我们要初始化页面中用到的TextView、Button和EditView等控件信息。1.4.14 客户信息删除UI删除页面示意图同客户信息查询UI部分列表页面。1.4.15 客户信息删除UI删除页面项目说明同客户信息查询UI部分列表页面。1.4.16 客户信息删除UI操作选择对话框示意图图 231.4.17 客户信息删除UI操作选择对话框项目说明Dailog控件:用户长按XX客户信息项,弹出“操作选择”对话框,包括:“修改客户信息
15、”和“删除客户信息”选择项。1.4.18 客户信息删除类图同客户信息查询类图。1.4.19 客户信息查看UI查看页面示意图同客户信息查询UI部分列表页面。1.4.20 客户信息查看UI查看页面项目说明同客户信息查询UI部分列表页面。1.4.21 客户信息查看UI查看对话框示意图图 241.4.22 客户信息查看UI查看对话框项目说明Dailog控件:title客户名称,setView部分客户信息的内容,“关闭”按钮。1.4.23 客户信息查看类图同客户信息查询类图。1.5 数据库设计我们的系统采用SQLite嵌入式数据库,在这个数据库中只有一个表Client表。图 25数据库名称完成日期版本设
16、计者审核者表名Client实体名称客户主键_id索引表名称和索引字段名称序号项目名称项目说明类型(宽度)位数属性备注1_id编号integerP、N2clientname客户名称varchar200N3linkman联系人varchar100N4phone电话varchar100N5email电子邮箱varchar200N6address地址varchar200 :U:唯一(Unique) P:主键(Primary) N:非空(Not Null)F:外键(Foreign) D:默认(Default) I:自增长(auto increment)1.6 系统实现代码解析1.6.1 系统配置文件是系
17、统中的配置文件,我们需要将系统中用到的Android组件全都在这个文件中注册,其中CRMListActivity是启动屏幕显示的Activity。DataProvider是我们系统中Content Provider组件,用于实现数据持久化的操作。代码清单1 1.6.2 系统常量定义作为良好的编程习惯,我们应该把系统中用到的常量都定义到一个接口文件中。代码清单2 public interface SysConst public static final String DATABASE_NAME = ; public static final String TABLE_NAME = client;
18、 public static final String TABLE_FIELD_ID = _id; public static final String TABLE_FIELD_CLIENTNAME = clientname; public static final String TABLE_FIELD_LINKMAN = linkman; public static final String TABLE_FIELD_PHONE = phone; public static final String TABLE_FIELD_EMAIL = email; public static final
19、String TABLE_FIELD_ADDRESS = address; public static final String AUTHORITY = ; public static final Uri CONTENT_URI = ( + AUTHORITY + / + TABLE_NAME); 1.6.3 数据持久化部分代码持久化部分的代码包括:数据库帮助类DBHelper和数据操作类DataProvider。DBHelper类:编写一个DBHelper类,此类继承SQLiteOpenHelper。在此类中我们重写父类中的onCreate方法和onUpgrade方法,同时创建数据库。onC
20、reate方法中创建表,在onUpgrade方法中删除表,并重新调用onCreate方法,当数据库版本号发生改变时就调用该方法。代码清单3 ublic class DBHelper extends SQLiteOpenHelper public DBHelper(Context context) super(context, , null, 4); Override public void onCreate(SQLiteDatabase db) try StringBuffer sql = new StringBuffer(); (CREATE TABLE ); ; ( (); ; ( INT
21、EGER PRIMARY KEY autoincrement,); ; ( varchar(200),); ; ( varchar(100),); ; ( varchar(100),); ; ( varchar(200),); ; ( varchar(200); ();); (TAG, (); (); catch (Exception e) (TAG, (); Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) (DROP TABLE IF EXISTS + ; onCreate(d
22、b); DataProvider类:编写一个DataProvider类,此类继承ContentProvider。在此类插入(insert)方法,参数为uri和values。实例化dbhepler类中的getWritableDatabase方法,调用SQLiteOpenHelper类中的insert方法,参数为表名、要插入的值。如果返回值大于零则插入成功,失败则抛出异常。代码清单4 文件中insert方法Override public Uri insert(Uri uri, ContentValues values) SQLiteDatabase db = (); long rowId = ,
23、null, values); if (rowId 0) 代码清单5 文件中delete方法et(1); String whereClause = + = + rowid; return , whereClause, null); 在DataProvider类中查询(query)方法,参数为uri、字段名称集合、where条件、where参数和查询出结果的排序情况。实例化dbhepler类中的getWritableDatabase方法,调用SQLiteOpenHelper类中的query方法,参数为表名、字段名称数组、where条件、where参数数组和查询结果的排序情况。代码清单6 文件中qu
24、ery方法Override public Cursor query(Uri uri, String projection, String selection, String selectionArgs, String sortOrder) SQLiteDatabase db = (); return , new String , , , , , , , selection, selectionArgs, null, null, + asc); 在DataProvider类中修改(update)方法,参数为uri、修改值、where条件和where参数。实例化dbhepler类中的getWrit
25、ableDatabase方法,调用SQLiteOpenHelper类中的update方法,参数为表名、要修改值、where条件。代码清单7 文件中update方法Override public int update(Uri uri, ContentValues values, String selection, String selectionArgs) SQLiteDatabase db = (); String rowid = ().get(1); String whereClause = + = + rowid + (!(selection) ? AND ( + selection +
26、) : ); return , values, whereClause, null); 1.6.4 客户信息查询布局文件查询页面布局采用XML形式,文件放置在reslayout中。页面中要声明一个ListView控件,采用LinearLayout布局方式,可以自动适应屏幕大小的变化。代码清单8 布局文件 1.6.5 客户信息查询无条件查询方法无条件查询方法是在初始化页面时候调用的,是通过CRMListActivity在onCreate方法中调用findAll实现的,在Android中的Activity中我们可以通过getContentResolver()方法获得ContentResolver 对象,这个对象是可以通过Android框架调用到ContentProvider对象DataProvider对象。为了能够为ListView提供数据我们还要使用S
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1