安卓记事本开发设计报告_第1页
安卓记事本开发设计报告_第2页
安卓记事本开发设计报告_第3页
安卓记事本开发设计报告_第4页
安卓记事本开发设计报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

滨江学院《移动通信程序设计》课程设计题目Android记事本院系计算机系专业计科3学生姓名窦同庆学号20232308904二O一四年五月二十九日目录一、引言11.1Android背景11.2可行性分析1二、开发环境的安装和配置12.1开发包及其工具的介绍12.2Android开发平台搭建2安装包下载2软件安装2三、软件功能规划33.1软件功能32.2界面设计3四、程序设计34.1记事本组件的设计34.2记事本逻辑设计34.3记事本存储实现3数据存储之sharedPreferences3数据存储之files4数据存储之network5数据存储之SQLite54.3.5数据存储之ContentProviders7五、程序开发75.1主activity的设计75.2编辑内容85.3删除记事95.4程序执行流程9六、程序截图121.添加新记事122.修改记事13七、总结15Android记事本窦同庆南京信息工程大学计算机系,南京210044摘要:随着3G技术的成熟和智能的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。在Google和Android联盟的共同推动下,Android在众多移动应用开发平台中脱颖而出。关键词:android记事本eclipse1概要1.1Android背景Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的操作系统。早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续进行对Android系统开发运营,它采用了软件堆层〔softwarestack,又名软件叠层〕的架构,主要分为三局部。底层Linux内核只提供根本功能,其他的应用软件那么由各公司自行开发,局部程序以Java编写。2023年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统,使之跃居全球最受欢送的智能平台。开放性:在优势方面,Android平台首先就是其开放性,开发的平台允许任何移动终端厂商参加到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开放性对于Android的开展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的。挣脱运营商的束缚:在过去很长的一段时间,特别是在欧美地区,应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。自从iPhone上市,用户可以更加方便地连接网络,运营商的制约减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,随意接入网络已不是运营商口中的笑谈。丰富的硬件选择:这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容。好比你从诺基亚Symbian风格一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。不受任何限制的开发商:Android平台提供应第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻挠,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。无缝结合的Google应用:如今叱咤互联网的Google已经走过10年度历史。从搜索巨人到全面的互联网渗透,Google效劳如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台将无缝结合这些优秀的Google效劳。1.2可行性分析〔1〕技术可行性本工程仅需要一台装有Eclipse及配置好Android开发环境的计算机即可,对计算机本身有一定的要求,它可以使用windowsxp及其以上版本,macos,linux等操作系统。〔2〕经济可行性由于本软件开发只有一个单个人,一台电脑就行,根本不需要太大的本钱.在经济上完全可行。〔3〕操作可行性界面设计时充分考虑用户的习惯以及方面的局限性,程序必须要很简单;本程序只涉及到开发环境配置,安卓组件的熟悉,以及安卓平台上的数据存储。并没有太大的难度,所以,该工程完全有可操作性.2开发环境的安装和配置2.1开发包及其工具的介绍Android以java作为开发语言,jdk是进行java开发时必需的开发包,Eclipse是一款非常优秀的开源IDE,在大量插件的配合下,完全可以满足从企业级java应用到终端java游戏的开发。Google官方也提供了基于Eclipse的Android开发插件ADT,所以本软件开发选择Eclipse作为开发IDE。2.2Android开发平台搭建安装包下载〔1〕javaJDK下载进入选择DownloadJDK只下载JDK,无需下载jre。〔2〕Eclipse下载进入:///downloads我们选择第一个,即EclipseIDEforjavaEEDevelopers。〔3〕AndroidSDK下载说明:AndroidSDK两种下载版本,一种是包含具体版本的SDK的,一种是只有升级工具,而不包含具体的SDK版本。完全版下载(Androidsdk2.1r01)。软件安装〔1〕安装JDK安装完成即可。〔2〕解压EclipseEclipse无需安装,解压后,直接翻开就行。〔3〕解压AndroidSDK这个也无需安装,解压后供后面使。〔4〕配置Eclipse翻开Eclipse,,在菜单栏上选择help->InstallNewSoftWare点击Add按钮,出现如下界面,输入网址:android/eclipse/(如果出错,请将s改成),名称:Android(这里可以自定义),点击OK,点击Next按钮,点击Next按钮,出现如下界面:选择Iacceptthetermsofthelicenseagreements,点击Next,进入安装插件界面安装完成后,点击Yes按钮,重启Eclips。〔5〕配置AndroidSDK点击菜单window->preferences选择你的AndroidSDK解压后的目录,选错了就会报错,这个是升级工具,目前还没有一个版本的SDK升级SDK版本,选择菜单window->Androidsdkandavdmanager选择updateall按钮,出现如下界面选择左边的某一项,点击accept表示安装,点击reject表示不安装,我这里只选了SDK2.1和samplesforapi7,,自己可以任意自定义,确定后,选择install按钮,进入安装界面:安装完成。〔6〕新建AVD(Androidvituraldevice)和上面一样,进入Androidsdkandavdmanager,选中VituralDevices在点击New按钮后,名称可以随便取,target选择你需要的SDK版本,SD卡大小自定义,点击CreateAVD,显示创立AVD完毕。〔7〕新建Android工程选择菜单file->new->other进入如下界面:选择新建AndroidProject工程,点击Next按钮,进入如下界面名称自定义,应用程序名自定义,报名必须包含一个点以上,minSDKversion里面必须输入整数〔8〕配置运行右键工程->Runas->RunConfiguration该界面,点击Browse按钮,选择你要运行的工程选择Target切换到以下界面该界面选择运行的AVD,将AVD前面的方框设置为选择状态。〔9〕测试工程运行右键工程名称->runas->AndroidApplication即可启动运行该Android程序。3软件功能规划3.1软件功能能够提示用户是否有已写记事本,能够进行记事本的标题填写和内容填写,确定后保存。3.2界面设计进入程序提示“您还没有开始写日记呢!点击下边的Menu按钮开始写日记吧!〞,点击menu菜单后进入标题和内容的填写界面。4程序设计4.1记事本组件的设计本工程涉及到以下组件:TextView:“记事本〞,“新建记事〞,“编辑记事〞等标题。EditView:“记事本的标题〞,“内容〞等。Button:“确定〞按钮。Menu:“添加新记事〞,“编译内容〞,“删除当前记事〞等。4.2记事本逻辑设计〔1〕添加新记事如果当前没有记事,点击“menu〞后只有一个菜单项选择项“添加新记事〞,写完记事之后,点击“确定〞进行保存。〔2〕编辑内容选中要编辑的那一个记事,然后点击“menu〞菜单,会出现三个选项“新建记事〞,“编辑内容〞,“删除当前记事〞,点击“编辑内容〞对被选中的记事进行编辑,然后点击“确定〞加以保存。〔3〕删除记事点击上下键,选中要删除的记事,然后点击“menu〞菜单,然后点击“删除当前记事〞,对选中的记事加以删除。4.3记事本存储实现Android中一共提供了5种数据存储方式,但是由于存储的这些数据都是其应用程序私有的,所以如果需要在其他应用程序中使用这些数据,就要使用Android提供的ContentProviders。ContentProviders:Android提供的一个特殊的存储数据的类型,它提供了一套标准的接口来获取,操作数据。SharedPreference:用来存储“key-valuepaires〞格式的数据,它是一个轻量级的键值存储机制,只可以存储根本数据类型。 Files:它通过FileInputStream和FileOutputStream对文件进行操作,但是在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件。 SQLite:Android提供的一个标准的数据库,支持SQL语句。 Network:通过网络来存储和获得数据。4.3.1数据存储之SharedPreferences通过getpreferences()方法来获得Preference对象,通过SharePreferences.Editoreditor=uiState.edit;取得编辑对象,然后通过editor.put……()方法添加数据,最后通过commit()方法来保存数据。4.3.2数据存储之Files我们可以通过自定义的save()方法来保存数据,同时也可以通过load()方法来获取文件中的数据。 booleansave() { Propertiesproperties=newProperties(); /*将数据打包成Properties*/ properties.put("bmusic",String.valueOf(mbMusic)); try { FileOutputStreamstream=this.openFileOutput("music.cfg",Context.MODE_WORLD_WRITEABLE); /*将打包好的数据写入文件中*/ properties.store(stream,""); } catch(FileNotFoundExceptione) { returnfalse; } catch(IOExceptione) { returnfalse; } returntrue; } /*装载、读取数据*/ voidload() { /*构建Properties对对象*/ Propertiesproperties=newProperties(); try { /*开发文件*/ FileInputStreamstream=this.openFileInput("music.cfg"); /*读取文件内容*/ properties.load(stream); } catch(FileNotFoundExceptione) { return; } catch(IOExceptione) { return; } /*取得数据*/ mbMusic=Boolean.valueOf(properties.get("bmusic").toString()); }4.3.3数据存储之Network通过网络来获取和保存数据资源,将数据存储到网络上的方法很多,比方将要保存的数据以文件的方式上传到效劳器,发送邮件等。 下面我们看下如何实现读取网络文件StringmyString=null; try { /*定义我们要访问的地址url*/ URLuri=newURL("://10:8080/Android.txt"); /*翻开这个url连接*/ URLConnectionucon=uri.openConnection(); /*从上面的链接中取得InputStream*/ InputStreamis=ucon.getInputStream(); BufferedInputStreambis=newBufferedInputStream(is); ByteArrayBufferbaf=newByteArrayBuffer(100); intcurrent=0; /*一直读到文件结束*/ while((current=bis.read())!=-1) { baf.append((byte)current); } myString=newString(baf.toByteArray()); } catch(Exceptione) { myString=e.getMessage(); }另外由于在程序中访问了外部网络,我们需要在AndroidManifest.xml文件中给予权限,代码如下: <uses-permissiionAndroid:name=〞Android.permission.INTERNET〞/>4.3.4数据存储之SQLite这个方法在数据保存中非常常用.只是它只会被一个程序读取数据,不能在不同程序间共享数据. /*创立和翻开数据库*/mSQLiteDatabase=this.openOrCreateDatabase(DATABASE_NAME,MODE_PRIVATE,null); /*创立表*/mSQLiteDatabase.execSQL(CREATE_TABLE); /*删除数据库*/ publicvoidDeleteDataBase() { this.deleteDatabase(DATABASE_NAME); this.finish(); } /*删除一个表*/ publicvoidDeleteTable() { mSQLiteDatabase.execSQL("DROPTABLE"+TABLE_NAME); this.finish(); } /*更新一条数据*/ publicvoidUpData() { ContentValuescv=newContentValues(); cv.put(TABLE_NUM,miCount); cv.put(TABLE_DATA,"修改后的数据"+miCount); /*更新数据*/ mSQLiteDatabase.update(TABLE_NAME,cv,TABLE_NUM+"="+Integer.toString(miCount-1),null); UpdataAdapter(); } /*向表中添加一条数据*/ publicvoidAddData() { ContentValuescv=newContentValues(); cv.put(TABLE_NUM,miCount); cv.put(TABLE_DATA,"测试数据库数据"+miCount); /*插入数据*/ mSQLiteDatabase.insert(TABLE_NAME,null,cv); miCount++; UpdataAdapter(); } /*从表中删除指定的一条数据*/ publicvoidDeleteData() { /*删除数据*/ mSQLiteDatabase.execSQL("DELETEFROM"+TABLE_NAME+"WHERE_id="+Integer.toString(miCount)); miCount--; if(miCount<0) { miCount=0; } UpdataAdapter(); } /*更行试图显示*/ publicvoidUpdataAdapter() { //获取数据库Phones的Cursor Cursorcur=mSQLiteDatabase.query(TABLE_NAME,newString[]{TABLE_ID,TABLE_NUM,TABLE_DATA},null,null,null,null,null); miCount=cur.getCount(); if(cur!=null&&cur.getCount()>=0) { //ListAdapter是ListView和后台数据的桥梁 ListAdapteradapter=newSimpleCursorAdapter(this, //定义List中每一行的显示模板 //表示每一行包含两个数据项Android.R.layout.simple_list_item_2, //数据库的Cursor对象 cur, //从数据库的TABLE_NUM和TABLE_DATA两列中取数据 newString[]{TABLE_NUM,TABLE_DATA}, //与NAME和NUMBER对应的Views newint[]{Android.R.id.text1,Android.R.id.text2}); /*将adapter添加到m_ListView中*/ m_ListView.setAdapter(adapter); } }4.3.5数据存储之ContentProvidersContentProviders:Android提供的一个特殊的存储数据的类型,它提供了一套标准的接口来获取,操作数据。查询数据:可以使用ContentProvider.query()或者Activity.managedQuery()方法。修改数据:通过ContentResolver.update()方法可以用来修改数据。添加数据:通过ContentResolver.insert()方法来增加一条数据。删除数据:通过ContentResolver.delete()方法来删除一条记录。5程序开发5.1主activity的设计中选择“新建记事本〞,“编辑内容〞,“删除当前记事〞等菜单项选择项时对应的操作。publicbooleanonOptionsItemSelected(MenuItemitem){ switch(item.getItemId()){ //插入一条数据 caseMENU_ITEM_INSERT: Intentintent0=newIntent(this,ActivityDiaryEditor.class); intent0.setAction(ActivityDiaryEditor.INSERT_DIARY_ACTION); intent0.setData(getIntent().getData()); startActivity(intent0); returntrue; //编辑当前数据内容 caseMENU_ITEM_EDIT: Intentintent=newIntent(this,ActivityDiaryEditor.class); intent.setData(item.getIntent().getData()); intent.setAction(ActivityDiaryEditor.EDIT_DIARY_ACTION); startActivity(intent); returntrue; //删除当前数据 caseMENU_ITEM_DELETE: Uriuri=ContentUris.withAppendedId(getIntent().getData(), getListView().getSelectedItemId()); getContentResolver().delete(uri,null,null); renderListView(); } returnsuper.onOptionsItemSelected(item); }5.2编辑内容protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//setTheme(Android.R.style.Theme_Black);finalIntentintent=getIntent();finalStringaction=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.getData();mCursor=managedQuery(mUri,PROJECTION,null,null,null);mCursor.moveToFirst();Stringtitle=mCursor.getString(1);mTitleText.setTextKeepState(title);Stringbody=mCursor.getString(2);mBodyText.setTextKeepState(body);setResult(RESULT_OK,(newIntent()).setAction(mUri.toString()));setTitle("编辑记事");}elseif(INSERT_DIARY_ACTION.equals(action)){//新建日记mState=STATE_INSERT;setTitle("新建记事");}else{Log.e(TAG,"nosuchactionerror");finish();rgetContentResolver().insert(Diary.DiaryColumns.CONTENT_URI,values); privatevoidupdateDiary(){ Stringtitle=mTitleText.getText().toString(); Stringbody=mBodyText.getText().toString(); ContentValuesvalues=newContentValues(); values.put(Diary.DiaryColumns.CREATED,DiaryContentProvider .getFormateCreatedDate()); values.put(Diary.DiaryColumns.TITLE,title); values.put(Diary.DiaryColumns.BODY,body); getContentResolver().update(mUri,values, null,null); }}5.3删除记事privatevoidrenderListView(){ Cursorcursor=managedQuery(getIntent().getData(),PROJECTION,null, null,DiaryColumns.DEFAULT_SORT_ORDER); SimpleCursorAdapteradapter=newSimpleCursorAdapter(this, R.layout.diary_row,cursor,newString[]{DiaryColumns.TITLE, DiaryColumns.CREATED},newint[]{R.id.text1, R.id.created}); setListAdapter(adapter); }5.4程序执行流程MainActivity.java文件:packagecom.zxl.Ex03_07;import

com.zxl.service.FileService;

import

Android.app.Activity;

import

Android.os.Bundle;

import

Android.view.View;

import

Android.widget.Button;

import

Android.widget.EditText;

import

Android.widget.Toast;

public

class

MainActivity

extends

Activity

{EditText

editText1=null;

EditText

editText2=null;

Button

button1=null;

FileService

service=null;

/**

Called

when

the

activity

is

first

created.

*/

@Override

public

void

onCreate(Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

editText1=(EditText)findViewById(R.id.edit1);

editText2=(EditText)findViewById(R.id.edit2);

button1=(Button)findViewById(R.id.button1);

button1.setOnClickListener(new

View.OnClickListener()

{

@Override

public

void

onClick(View

v)

{

String

filename=editText1.getText().toString()+".txt";

String

content=editText2.getText().toString();

service=new

FileService(MainActivity.this);

try

{

service.save(filename,

content);

}

catch

(Exception

e)

{

e.printStackTrace();

}finally{

Toast.makeText(MainActivity.this,

getString(R.string.sucess),

Toast.LENGTH_SHORT).show();

}

}

});

}

}

用于文件操作的类:FileService.javapackagecom.zxl.service;import

java.io.FileOutputStream;

import

Android.content.Context;

public

class

FileService

{

Context

context;

public

FileService(Context

context){

this.context=context;

}

public

void

save(String

filename,String

content)throws

Exception{

FileOutputStream

outputStream=context.openFileOutput(filename,Context.MODE_PRIVATE);

outputStream.write(content.getBytes());

outputStream.close();

}}

布局文件:main.xml:<?xml

version="1.0"

encoding="utf-8"?>

<LinearLayout

xmlns:Android="://schemas.Android/apk/res/Android"

Android:orientation="vertical"

Android:layout_width="fill_parent"

Android:layout_height="fill_parent"

Android:background="@drawable/note1"

>

<TextView

Android:id="@+id/text1"

Android:layout_width="wrap_content"

Android:layout_height="wrap_content"

Android:text="@string/theme"

Android:textSize="25sp"

Android:layout_gravity="center_horizontal"

Android:paddingTop="20dip"

Android:textColor="#FFaa00"

/>

<TextView

Android:id="@+id/text2"

Android:layout_width="wrap_content"

Android:layout_height="wrap_c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论