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