版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z.Android记事本的设计与实现——SQLite数据库的设计和操作学生**:指导老师:摘要:随着智能手机的快速普及,智能手机操作系统市场风生水起。Android的最大特点是其开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。本文主要介绍了一款Android记事本SQLite数据库模块的设计与实现。根据人们日常生活的需要,该记事本的内容包括运用SQLite封装好的方法对数据进行添加、删除、修改、更新和密码进入等功能,并且将查询到的数据传递给activity,具有一定的实用性。关键词:记事本;Android;手势密码;SQLite;ActivityDesignandimplementationofAndroidnotepad—DesignandoperationoftheSQLitedatabaseStudentname:Advisor:AbstractWiththerapidproliferationofsmartphones,smartphoneoperatingsystemmarketburgeoned.Android'sbiggestfeatureisitsopenarchitecture,notonlyhasaverygooddevelopment,debuggingenvironment,butalsosupportsavarietyofscalableusere*perience,includingrichgraphicalponents,multimediasupportandpowerfulbrowser.ThispaperdescribesthedesignandimplementationofanAndroidnotepadSQLitedatabasemodule.Accordingtotheneedsofdailylife,includingthecontentsofthenotepadgoodwaytouseSQLitepackagedatatoadd,delete,modify,updateandpasswordtoaccessotherfunctions,andquerythedataispassedtotheactivity,hasacertainpracticality.KeywordsNotepad;Android;gesturepassword;SQLite;Activity目录29953目录3199641.引言456561.1项目背景437891.2项目意义448651.3系统可行性分析5223011.4系统主要任务514282.系统方案设计67602.1搭建Android开发平台6176302.2SQLite数据库简介750332.3总体方案设计10250253.系统软件开发环境1082563.1Windows开发环境1086693.2JAVA集成开发环境eclipse11326153.3ADTPluginforEclipse11129544.程序设计1273614.1程序详细设计12239314.2程序运行及效果截图13159794.3对SQLite数据库增删改查代码实现1841445.工作总结与展望2325430参考文献24-.z.引言1.1项目背景Window操作系统的诞生成就了微软帝国,同时也造就了PC时代的繁荣,然而如今,以Android和iPhone手机为代表的智能移动设备的发明与互联网云技术的兴起却敲响了PC时代的丧钟!这也预示着移动互联网时代(3G)已经来临。在这个互联网繁荣的时代,有一颗超新星,以它独特性能优势与人性化的UI设计使它在短短的几年迅速的占领了智能移动设备的市场份额,它就是Google的Android!这也意味着Google在移动互联网时代开始抢跑并领跑。通过调查显示,大部分消费者都会使用手机记事本功能。随着手机记事本功能的不断加强与完善,手机记事本对于人们的意义,已不仅仅像一般记事簿一样简单记录,而是向着更个性化人性化的方向发展。Android[1]系统是开源的,它以迅猛的姿势已经占领了全球一半多的市场。记事本在生活和工作也日益凸显出它的重要性,它能更好地帮助人们更好地管理自己的工作和生活,极大的方便了人们的生活。因其开源,我们可以在之上开发安卓记事本软件,同时这也符合广大的市场需求。1.2项目意义近几年来随着3G技术成熟和智能手机的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。在Google和Android手机联盟的共同推动下,Android在众多移动应用开发平台中脱颖而出。Android是一个真正意义上的开源智能手机操作系统,该系统一经推出立即受到全球移动设备厂商和开发者的热捧。我们都知道,无论是产品还是技术,商业应用都是它最大的发展动力。安卓如此受到厂商与开发者的青睐,它的前景是一片光明的。国内对于安卓这方面的市场还没有完全开发出来。只要我们努力学习安卓,对理想,对生活都会有很大的补益。因此,开发这样一套很简单的记事本软件对我们来讲是一件很有必要的事情,在下面的各章中我们将以开发安卓记事本软件为例,谈谈其开发过程和所涉及到的问题及解决方法。1.3系统可行性分析1.3.1课题调研与实践活动和相关的文件和资料由作者本人网络查找,以及老师帮助。具有遇到问题,具有独立思考,耐心钻研,向老师虚心求教的良好态度。关于技术方面的难题,跟指导老师面谈。1.3.2可行性分析技术可行性:本项目仅需要一台装有Eclipse及配置好Android开发环境的计算机即可,对计算机本身有一定的要求,它可以使用Windows*p及其以上版本,Macos,Linu*等操作系统。经济可行性:由于本软件开发只有三个人,三台电脑就行,基本不需要太大的成本.在经济上完全可行。操作可行性:界面设计时充分考虑用户的习惯以及手机方面的局限性,程序必须要很简单;本程序只涉及到开发环境配置,安卓组件的熟悉,以及安卓平台上的数据存储。并没有太大的难度,所以,该项目完全有可操作性。1.4系统主要任务(1)设计实现”添加新记事”,”编辑内容”,”删除当前记事”这三个主要的功能模块。(2)分析并解决实现中的若干技术问题,像组件的选择以及保存方式的选择。(3)进行测试并分析结果。当然记事本的基本功能,建立新文件、修改现有文件、删除文件、查看已建立文件等功能是首先必须完成的。可以编写内容,编辑及删除,让记事的方式多样化。记事本软件的界面设计力求简洁,给人清爽的感觉,让图标及按钮以协调的布局呈现出了,菜单功能要相对简单,让用户操作方便,从而让用户体会到此款软件的实用。因为上述操作涉及到的数据量不大,所以将数据库定为安卓系统自带的SQLite数据库[3],所以这就要求我们要实现在SQLite数据库上面的增删改查。不少人希望自己记事本上面的内容不被被人查看,所以要以设置密码的形式来实现**。鉴于各种各样的密码实现方式,我们选择了用户体验最好的手势解锁方式。以及采用了更加友好的时间显示方式,让用户在使用过程中更加的舒服方便。记事本软件要内存占用适中,CPU占用也是适中,这样让软件运行顺畅。2.系统方案设计2.1搭建Android开发平台2.1.1
安装包下载(1)java
JDK下载
进入java.sun./javase/downloads/inde*.jsp选择DownloadJDK只下载JDK,无需下载jre。
(2)Eclipse下载
进入./downloads我们选择第一个,即EclipseIDEforjavaEEDevelopers。(3)AndroidSDK下载
说明:AndroidSDK两种下载版本,一种是包含具体版本的SDK的,一种是只有升级工具,而不包含具体的SDK版本,完全版下载(Androidsdk2.01)。
2.1.2
软件安装(1)安装JDK
安装完成即可。
(2)解压Eclipse
Eclipse无需安装,解压后,直接打开就行。
(3)解压Android
SDK
这个也无需安装,解压后供后面使。
(4)配置Eclipse
打开Eclipse,在菜单栏上选择help->InstallNewSoftWare点击Add按钮,出现如下界面,输入网址:https://dl-ssl.google./android/eclipse/(如果出错,请将https改成http),名称:Android(这里可以自定义),点击OK,点击Ne*t按钮,点击Ne*t按钮,出现如下界面:选择Iacceptthetermsofthelicenseagreements,点击Ne*t,进入安装插件界面安装完成后,点击Yes按钮,重启Eclips。
(5)配置AndroidSDK
点击菜单window->preferences选择你的AndroidSDK解压后的目录,选错了就会报错,这个是升级工具,目前还没有一个版本的SDK。升级SDK版本,选择菜单window->Androidsdkandavdmanager。选择update
all按钮,出现如下界面选择左边的*一项,点击accept表示安装,点击reject表示不安装,我这里只选了SDK2.1和samplesforapi7。自己可以任意自定义,确定后,选择install按钮,进入安装界面:安装完成。
(6)新建AVD(Android
vitural
device)
和上面一样,进入Androidsdkandavdmanager,选中VituralDevices在点击New按钮后,名称可以随便取,target选择你需要的SDK版本,SD卡大小自定义,点击CreateAVD,显示创建AVD完毕。
(7)新建Android项目
选择菜单file->new->other
进入如下界面:选择新建AndroidProject项目,点击Ne*t按钮,进入如下界面名称自定义,应用程序名自定义,报名必须包含一个点以上,minSDKversion里面必须输入整数
(8)配置运行
右键项目->Runas->RunConfiguration该界面,点击Browse按钮,选择你要运行的项目选择Target切换到以下界面该界面选择运行的AVD,将AVD前面的方框设置为选择状态。
(9)测试项目运行右键项目名称->runas->AndroidApplication即可启动运行该Android程序。2.2SQLite数据库简介SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linu*/Uni*等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C*、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。至2015年已经有15个年头,SQLite也迎来了一个版本SQLite3已经发布。2.2.1SQLite功能特性1.ACID事务2.零配置–无需安装和管理配置3.储存在单一磁盘文件中的一个完整的数据库4.数据库文件可以在不同字节顺序的机器间自由的共享5.支持数据库大小至2TB6.足够小,大致13万行C代码,4.43M7.比一些流行的数据库在大部分普通数据库操作要快8.简单,轻松的API9.包含TCL绑定,同时通过Wrapper支持其他语言的绑定10.良好注释的源代码,并且有着90%以上的测试覆盖率11.独立:没有额外依赖12.源码完全的开源,你可以用于任何用途,包括出售它13.支持多种开发语言,C,C++,PHP,Perl,Java,C*,Python,Ruby等同时它还支持事务处理功能等等。也有人说它象Microsoft的Access,有时候真的觉得有点象,但是事实上它们区别很大。比如SQLite支持跨平台,操作简单,能够使用很多语言直接创建数据库,而不象Access一样需要Office的支持。如果你是个很小型的应用,或者你想做嵌入式开发,没有合适的数据库系统,则你可以考虑使用SQLite。到2013年10月17日最新版本是3.8.1。能在上面获得源代码和文档。同时因为数据库结构简单,系统源代码也不是很多,也适合想研究数据库系统开发的专业人士.2.2.2Java连接SQLite数据库:publicclassTestSQLite{publicstaticvoidmain(String[]args){try{//连接SQLite的JDBCClass.forName("org.sqlite.JDBC");//建立一个数据库名zieckey.db的连接,如果不存在就在当前目录下创建之Connectionconn=DriverManager.getConnection("jdbc:sqlite:zieckey.db");Statementstat=conn.createStatement();stat.e*ecuteUpdate("createtabletbl1(namevarchar(20),salaryint);");//创建一个表,两列stat.e*ecuteUpdate("insertintotbl1values('ZhangSan',8000);");//插入数据stat.e*ecuteUpdate("insertintotbl1values('LiSi',7800);");stat.e*ecuteUpdate("insertintotbl1values('WangWu',5800);");stat.e*ecuteUpdate("insertintotbl1values('ZhaoLiu',9100);");ResultSetrs=stat.e*ecuteQuery("select*fromtbl1;");//查询数据while(rs.ne*t()){//将查询到的数据打印出来System.out.print("name="+rs.getString("name")+"");//列属性一System.out.println("salary="+rs.getString("salary"));//列属性二}rs.close();conn.close();//结束数据库的连接}catch(E*ceptione){e.printStackTrace();}}}2.3总体方案设计在本模块中,主要设计到三个文件,第一个是与数据库表相对应的实体类,第二个是创建数据库、创建表的类,第三个是对应的增删改查的方法。下面是整个项目的总体方案设计:本次Android项目中运用的技术比较广,从基础的Activity、SQLite到开源的手势密码组件,因此将项目尽可能完美的整合到一起成了很重要的一部,如何将总体方案设计的规*以及高校是必不可少。从人员安排上,我们三人分头进行,各不影响,我主要负责的是Activity的展示,也就是将其他组员的劳动成果展示出来,则如何美观以及高性能的展示变成了难点。从设计模式上,我们严格遵循AndroidDesign的规格,并且使用Google在I/O大会上推荐的一些开发方法,从而尽可能的讲模块规*化。从时间分配上,我们进行了敏捷性开发,充分合理的利用了大家的时间。3.系统软件开发环境3.1Windows开发环境1.用户界面统一、友好、漂亮:Windows应用程序大多符合IBM公司提出的CUA(monUserAcess)标准,所有的程序拥有相同的或相似的基本外观,包括窗口、菜单、工具条等。用户只要掌握其中一个,就不难学会其他软件,从而降低了用户培训学习的费用。2.丰富的设备无关的图形操作:Windows的图形设备接口(GDI)提供了丰富的图形操作函数,可以绘制出诸如线、圆、框等的几何图形,并支持各种输出设备。设备无关意味着在针式打印机上和高分辨率的显示器上都能显示出相同效果的图形。3.多任务:Windows是一个多任务的操作环境,它允许用户同时运行多个应用程序,或在一个程序中同时做几件事情。每个程序在屏幕上占据一块矩形区域,这个区域称为窗口,窗口是可以重叠的。用户可以移动这些窗口,或在不同的应用程序之间进行切换,并可以在程序之间进行手工和自动的数据交换和通信。虽然同一时刻计算机可以运行多个应用程序,但仅有一个是处于活动状态的,其标题栏呈现高亮颜色。一个活动的程序是指当前能够接收用户键盘输入的程序。3.2JAVA集成开发环境eclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。虽然大多数用户很乐于将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具[6]。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具[7]。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++、COBOL、PHP等编程语言的插件已经可用,或预计将会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础。3.3ADTPluginforEclipseADTPluginforEclipse[9]是Eclipse插件,作用是关联AndroidSDK,使Eclipse能够创建Android工程。Android开发工具(ADT)是一个EclipseIDE,目的是给你一个强大的插件,集成环境中构建Android应用程序。Eclipse的ADT延伸的能力,可以快速建立新的Android[10]项目,创建一个应用程序的用户界面,添加组件基于Android框架API,使用AndroidSDK工具调试程序,甚至出口签名(或无)APKs以分发你的应用。4.程序设计4.1程序详细设计图4.1系统流程图安卓记事本本人涉及到的是SQLite的设计与操作,主要设计到的文件有三个。分别是:MemoItem.java(与数据库表相对应的实体类)、MemoService.java(对SQLite数据库进行增删改查的方法)、DBHelper.java(建立数据库、建立表的方法)。在SQLite上建数据库,建表主要要继承SQLiteOpenHelper这个类。在构造方法中实现建数据库,在onCreate方法中进行建表。实现数据的增删改查,先用dbOpenHelper获得WritableDatabase,再进行相应的操作。还要用到cursor来移动游标,MemoItem返回每一条记录,List<MemoItem>返回记录的list集合。在设计SQLite数据库的同时,还进行了几个简单的Activity的编写。Activity是Android开发的重点,它与*ML一个负责界面,一个负责界面实现。此外,在写Activity的时候充分利用JAVA的继承特性,将MainActivity作为基类,让其他Activity继承它,虽然整个项目比较小,但是这种利用JAVA特征的设计模式还是充分利用了。4.2程序运行及效果截图图4.2程序的首页图4.3绘制手势图4.4通过手势登录图4.5登录成功图4.6创建新笔记图4.7创建成功图4.8更新笔记图4.9更新成功图4.10所有笔记显示页面4.3对SQLite数据库增删改查代码实现增删改查:package.e*ample.others;importjava.util.ArrayList;importjava.util.List;importandroid.content.Conte*t;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;publicclassMemoService{ privateDBOpenHelperdbOpenHelper; privateSQLiteDatabasedb; privateCursorcursor; publicMemoService(Conte*tconte*t) { this.dbOpenHelper=newDBOpenHelper(conte*t); } publiclongsave(MemoItemitem)//保存每一条数据 { db=dbOpenHelper.getWritableDatabase(); Stringsql="insertintomemo(content,time)values(",")"; db.e*ecSQL(sql,newObject[]{item.getContent(),item.getTime()});//将时间插入 cursor= db.rawQuery("SELECTlast_insert_rowid()",null); cursor.moveToFirst();//每次插入保证都在最前面一个 longresult=cursor.getLong(0); cursor.close(); db.close(); returnresult; } publicMemoItemgetMemoById(longtime)//显示每一条具体的记录 { db=dbOpenHelper.getReadableDatabase(); cursor=db.rawQuery("select*frommemowherememoid="", newString[]{time+""}); if(cursor.moveToFirst()) { Stringcontent=cursor.getString(cursor.getColumnInde*("content")); longtimes=cursor.getLong(cursor.getColumnInde*("time")); cursor.close(); db.close(); returnnewMemoItem(content,times); } cursor.close(); db.close(); returnnull; } publicvoidupdateContent(MemoItemitem)//更新每一条记录 { db=dbOpenHelper.getWritableDatabase(); db.e*ecSQL( "updatememosetcontent="wheretime="", newObject[]{item.getContent(),item.getTime() }); db.close(); } publicvoiddelete(longtime)//删除一条记录 { db=dbOpenHelper.getWritableDatabase(); db.e*ecSQL("deletefrommemowheretime="",newObject[]{time}); db.close(); } publiclonggetCount()//得到所有的记录数 { db=dbOpenHelper.getReadableDatabase(); cursor=db.rawQuery("selectcount(*)frommemo",null); cursor.moveToFirst(); longresult=cursor.getLong(0); cursor.close(); db.close(); returnresult; } publicList<MemoItem>getScrollData(intoffset,longma*Result)//列表显示 { List<MemoItem>books=newArrayList<MemoItem>(); db=dbOpenHelper.getReadableDatabase(); cursor=db.rawQuery( "select*frommemoorderbytimedesclimit","", newString[]{String.valueOf(offset), String.valueOf(ma*Result)}); while(cursor.moveToNe*t()) { longtime=cursor.getLong(cursor.getColumnInde*("time")); Stringcontent=cursor.getString(cursor.getColumnInde*("content")); books.add(newMemoItem(content,time)); } cursor.close(); db.close(); returnbooks; }}建数据库、建表package.e*ample.others;importandroid.content.Conte*t;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;publicclassDBOpenHelpere*tendsSQLiteOpenHelper{ publicDBOpenHelper(Conte*tconte*t) { super(conte*t,"csust.db",null,1);//创建一个数据库 } publicvoidonCreate(SQLiteDatabasedb) { db.e*ecSQL("CREATETABLEmemo(memoidintegerprimarykeyautoincrement,contentvarchar,timeinterger)");//创建一个memo表 } publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion) { db.e*ecSQL(null);//更新数据库 }}表所对应的实体类package.e*ample.others;importandroid.os.Parcel;importandroid.os.Parcelable;publicclassMemoItemimplementsParcelable{ privateStringcontent; privatelongtime; publicMemoItem(){} publicMemoItem(Stringcontent,longtime) { this.content=content; this.time=time; } publicStringgetContent() { returncontent; } publicvoidsetContent(Stringcontent) { this.content=content; } publiclonggetTime() { returntime; } publicvoidsetTime(longtime) { this.time=time; } Override publicStringtoString() { return"BaseItem[content="+content+",time="+time+"]"; } Override publicintdescribeContents() { return0; } Override publicvoidwriteToParcel(Parceldest,intflags) { dest.writeString(content); dest.writeLong(time); } publicstaticfinalParcelable.Creator<MemoItem>CREATOR=newCreator<MemoItem>() { Override publicMemoItemcreateFromPar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论