1、七、总结 15Android记事本窦同庆南京信息工程大学计算机系,南京 210044摘要:随着3G技术的成熟和智能手机的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。在Google和Android手机联盟的共同推动下,Android在众多移动应用开发平台中脱颖而出。关键词:android 记事本 eclipse1 概要1.1 Android背景Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。早期由原名为Android的公司开发,谷歌在2005年收购Android.Inc后,继续进行对Android系统开发
2、运营,它采用了软件堆层(softwarestack,又名软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。开放性:在优势方面,Android平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开放性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而
3、对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。挣脱运营商的束缚:在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。自从iPhone上市,用户可以更加方便地连接网络,运营商的制约减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈。丰富的硬件选择:这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响
4、到数据同步、甚至软件的兼容。好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。不受任何限制的开发商:Android平台提供给第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻挠,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。无缝结合的Google应用:如今叱咤互联网的Google已经走过10年度历史。从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要
5、纽带,而Android平台手机将无缝结合这些优秀的Google服务。1.2 可行性分析(1)技术可行性-本项目仅需要一台装有Eclipse及配置好Android 开发环境的计算机即可,对计算机本身有一定的要求,它可以使用windows xp及其以上版本,mac os,linux等操作系统。(2)经济可行性-由于本软件开发只有一个单个人,一台电脑就行,基本不需要太大的成本.在经济上完全可行。(3)操作可行性-界面设计时充分考虑用户的习惯以及手机方面的局限性,程序必须要很简单;本程序只涉及到开发环境配置,安卓组件的熟悉,以及安卓平台上的数据存储。并没有太大的难度,所以,该项目完全有可操作性.2 开
6、发环境的安装和配置2.1 开发包及其工具的介绍 Android以java作为开发语言,jdk是进行java开发时必需的开发包,Eclipse是一款非常优秀的开源IDE,在大量插件的配合下,完全可以满足从企业级java应用到手机终端java游戏的开发。Google官方也提供了基于Eclipse的Android开发插件ADT,所以本软件开发选择Eclipse作为开发IDE。2.2 Android开发平台搭建2.2.1 安装包下载(1)javaJDK下载进入JDK只下载JDK,无需下载jre。(2)Eclipse下载进入http:/www.eclipse.org/downloads我们选择第一个,即
7、Eclipse IDE for java EE Developers。(3)AndroidSDK下载说明:AndroidSDK两种下载版本,一种是包含具体版本的SDK的,一种是只有升级工具,而不包含具体的SDK版本。完全版下载(Androidsdk2.1r01)。2.2.2 软件安装(1)安装JDK安装完成即可。(2)解压EclipseEclipse无需安装,解压后,直接打开就行。(3)解压AndroidSDK这个也无需安装,解压后供后面使。(4)配置Eclipse 打开Eclipse,,在菜单栏上选择help-InstallNewSoftWare点击Add按钮,出现如下界面,输入网址:htt
8、ps:/dl-(如果出错,请将https改成http),名称:(这里可以自定义),点击OK,点击Next按钮,点击Next按钮,出现如下界面:选择Iacceptthetermsoflicenseagreements,点击Next,进入安装插件界面安装完成后,点击Yes按钮,重启Eclips。(5)配置AndroidSDK 点击菜单window-preferences选择你的AndroidSDK解压后的目录,选错了就会报错,这个是升级工具,目前还没有一个版本的SDK升级SDK版本,选择菜单window-andavdmanager选择updateall按钮,出现如下界面选择左边的某一项,点击acc
9、ept表示安装,点击reject表示不安装,我这里只选了SDK和samplesforapi7,,自己可以任意自定义,确定后,选择install按钮,进入安装界面:安装完成。(6)新建AVD(Androidvituraldevice)和上面一样,进入Androidmanager,选中Vitural Devices在点击New按钮后,名称可以随便取,target选择你需要的SDK版本,SD卡大小自定义,点击CreateAVD,显示创建AVD完毕。(7)新建Android项目选择菜单file-new-other进入如下界面:选择新建AndroidProject项目,点击Next按钮,进入如下界面名称
10、自定义,应用程序名自定义,报名必须包含一个点以上,minSDKversion里面必须输入整数(8)配置运行右键项目-Runas-Configuration该界面,点击Browse按钮,选择你要运行的项目选择Target 切换到以下界面该界面选择运行的AVD,将AVD前面的方框设置为选择状态。(9)测试项目运行右键项目名称-runApplication即可启动运行该Android程序。3 软件功能规划3.1 软件功能能够提示用户是否有已写记事本,能够进行记事本的标题填写和内容填写,确定后保存。3.2 界面设计进入程序提示“您还没有开始写日记呢!点击下边的Menu按钮开始写日记吧!”,点击menu
11、菜单后进入标题和内容的填写界面。4 程序设计4.1 记事本组件的设计本项目涉及到以下组件:TextView:“记事本”,“新建记事”,“编辑记事”等标题。EditView:“记事本的标题”,“内容”等。Button:“确定”按钮。Menu:“添加新记事”,“编译内容”,“删除当前记事”等。 4.2 记事本逻辑设计(1)添加新记事如果当前没有记事,点击“menu”后只有一个菜单选项“添加新记事”,写完记事之后,点击“确定”进行保存。(2)编辑内容选中要编辑的那一个记事,然后点击“menu”菜单,会出现三个选项“新建记事”,“编辑内容”,“删除当前记事”,点击“编辑内容”对被选中的记事进行编辑,然
12、后点击“确定”加以保存。(3)删除记事点击上下键,选中要删除的记事,然后点击“menu”菜单,然后点击“删除当前记事”,对选中的记事加以删除。4.3 记事本存储实现 Android 中一共提供了5种数据存储方式,但是由于存储的这些数据都是其应用程序私有的,所以如果需要在其他应用程序中使用这些数据,就要使用Android提供的Content Providers。 Content Providers:Android提供的一个特殊的存储数据的类型,它提供了一套标准的接口来获取,操作数据。 Shared Preference:用来存储“key-value paires”格式的数据,它是一个轻量级的键值
13、存储机制,只可以存储基本数据类型。 Files:它通过File Input Stream 和 File Output Stream对文件进行操作,但是在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件。 SQL ite:Android提供的一个标准的数据库,支持SQL语句。 Network:通过网络来存储和获得数据。4.3.1 数据存储之Shared Preferences 通过getpreferences()方法来获得Preference对象,通过SharePreferences.Editor editor=uiState.edit; 取得编辑对象,然后通过
14、editor.put()方法添加数据,最后通过commit()方法来保存数据。4.3.2 数据存储之Files我们可以通过自定义的save()方法来保存数据,同时也可以通过load()方法来获取文件中的数据。 boolean save() Properties properties = new Properties(); /* 将数据打包成Properties */ properties.put(bmusic, String.valueOf(mbMusic); try FileOutputStream stream = this.openFileOutput(music.cfg, Contex
15、t.MODE_WORLD_WRITEABLE); /* 将打包好的数据写入文件中 */ properties.store(stream, ); catch (FileNotFoundException e) return false; catch (IOException e) return true; /* 装载、读取数据 */ void load() /* 构建Properties对对象 */ /* 开发文件 */ FileInputStream stream = this.openFileInput( /* 读取文件内容 */ properties.load(stream); retur
16、n; /* 取得数据 */ mbMusic = Boolean.valueOf(properties.get().toString();4.3.3 数据存储之Network 通过网络来获取和保存数据资源,将数据存储到网络上的方法很多,比如将要保存的数据以文件的方式上传到服务器,发送邮件等。 下面我们看下如何实现读取网络文件 String myString = null; /* 定义我们要访问的地址url */ URL uri = new URL(http:/192.168.1.110:8080/Android.txt /* 打开这个url连接 */ URLConnection ucon = u
17、ri.openConnection(); /* 从上面的链接中取得InputStream */ InputStream is = ucon.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayBuffer baf = new ByteArrayBuffer(100); int current = 0; /* 一直读到文件结束 */ while (current = bis.read() != -1) baf.append(byte) current); myString = new
18、String(baf.toByteArray(); catch (Exception e) myString = e.getMessage(); 另外由于在程序中访问了外部网络,我们需要在AndroidManifest.xml文件中给予权限,代码如下: 4.3.4 数据存储之SQLite 这个方法在数据保存中非常常用.只是它只会被一个程序读取数据,不能在不同程序间共享数据. /*创建和打开数据库*/mSQLiteDatabase = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null); /*创建表*/mSQLiteDatab
19、ase.execSQL(CREATE_TABLE); /* 删除数据库 */ public void DeleteDataBase() this.deleteDatabase(DATABASE_NAME); this.finish(); /* 删除一个表 */ public void DeleteTable() mSQLiteDatabase.execSQL(DROP TABLE + TABLE_NAME); /* 更新一条数据 */ public void UpData() ContentValues cv = new ContentValues(); cv.put(TABLE_NUM, m
20、iCount); cv.put(TABLE_DATA, 修改后的数据 + miCount); /* 更新数据 */ mSQLiteDatabase.update(TABLE_NAME, cv, TABLE_NUM + = + Integer.toString(miCount - 1), null); UpdataAdapter(); /* 向表中添加一条数据 */ public void AddData()测试数据库数据 /* 插入数据 */ mSQLiteDatabase.insert(TABLE_NAME, null, cv); miCount+; /* 从表中删除指定的一条数据 */ p
21、ublic void DeleteData() /* 删除数据 */DELETE FROM + TABLE_NAME + WHERE _id= + Integer.toString(miCount); miCount-; if (miCount = 0) / ListAdapter是ListView和后台数据的桥梁 ListAdapter adapter = new SimpleCursorAdapter(this, / 定义List中每一行的显示模板 / 表示每一行包含两个数据项 Android.R.layout.simple_list_item_2, / 数据库的Cursor对象 cur,
22、 / 从数据库的TABLE_NUM和TABLE_DATA两列中取数据 new String TABLE_NUM, TABLE_DATA , / 与NAME和NUMBER对应的Views new int Android.R.id.text1, Android.R.id.text2 ); /* 将adapter添加到m_ListView中 */ m_ListView.setAdapter(adapter);4.3.5 数据存储之ContentProviders ContentProviders: Android提供的一个特殊的存储数据的类型,它提供了一套标准的接口来获取,操作数据。查询数据:可以使
23、用ContentProvider.query()或者Activity.managedQuery()方法。修改数据:通过ContentResolver.update()方法可以用来修改数据。添加数据:通过ContentResolver.insert()方法来增加一条数据。删除数据:通过ContentResolver.delete()方法来删除一条记录。5 程序开发5.1 主activity的设计当选择“新建记事本”,“编辑内容”,“删除当前记事”等菜单选项时对应的操作。public boolean onOptionsItemSelected(MenuItem item) switch (item
24、.getItemId() / 插入一条数据 case MENU_ITEM_INSERT: Intent intent0 = new Intent(this, ActivityDiaryEditor.class); intent0.setAction(ActivityDiaryEditor.INSERT_DIARY_ACTION); intent0.setData(getIntent().getData(); startActivity(intent0); return true; / 编辑当前数据内容 case MENU_ITEM_EDIT: Intent intent = new Inten
25、t(this, ActivityDiaryEditor.class); intent.setData(item.getIntent().getData(); intent.setAction(ActivityDiaryEditor.EDIT_DIARY_ACTION); startActivity(intent); / 删除当前数据 case MENU_ITEM_DELETE: Uri uri = ContentUris.withAppendedId(getIntent().getData(), getListView().getSelectedItemId(); getContentResolver().delete(uri, null, null); renderListView(); return super.onOptionsItemSelected(item);5.2 编辑内容protected void onCreate(Bundle savedInstanceState) su
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1