您的当前位置:首页正文

安卓记事本

2021-06-22 来源:步旅网
基于Android手机

平台的记事本设计

专 业 软件技术 学 号 2014034606 学生姓名 汤其强

目 录

第一章 引言 . ........................................................................................................... 1

1.1 课题研究的目的 ........................................................................................... 1 1.2 课题研究的意义 ........................................................................................... 1 1.3 课题的可行性分析 ....................................................................................... 2 第二章 开发环境的安装和配置 ................................................................................ 3

2.1 开发包及其工具的介绍 .................................................................................. 3 2.2 Android开发平台的搭建步骤 ....................................................................... 3 第三章 程序的设计 .................................................................................................... 4

3.1 记事本组件的设计 .......................................................................................... 4 3.2 记事本逻辑设计 ............................................................................................ 4 3.3 记事本存储实现 ............................................................................................ 4 第四章 程序的开发 .................................................................................................. 12

4.1主activity的设计 ........................................................................................... 12 4.2 编译内容 .................................................................................................... 13 第五章 程序的测试 ...................................................................................................... 14 第六章 总结 .............................................................................................................. 15 参考文献 ...................................................................................................................... 16

1

第一章 引言

1.1课题研究的目的

1.熟悉一下eclipse工具和安卓的环境配置及开发的过程

2.熟练掌握java的组件如button,textview,listView,menu等组件的灵活应用 3.熟练掌握安卓的一个关于数据保存的方式content providers。 4.锻炼一下自己遇到问题,然后解决问题的能力。

1.2 课题研究的意义

随着3G技术的成熟和智能手机的不断普及,移动应用的需求与日俱增,移动

应用开发成为当下最热门的技术之一.在google和android手机联盟的共同推动下,android在众多移动应用开发平台中脱颖而出.

Android操作系统是google最具杀伤力的武器之一.苹果以其天才的创新,是

的iphone在全球迅速拥有了数百万忠实的”粉丝”,而android作为第一个完整,开放,免费的手机平台,使开发者在为其开发程序时拥有更大的自由.与windows mobile ,symbian等厂商不同的是,android操作系统是免费向开发人员提供,这样可节省近三层得成本.

我们都知道,无论是产品还是技术,商业应用都是它最大的发展动

力.android如此受到厂商与开发者的青睐,它的前景是一片光明的.国内对于安 卓这方面的市场还没有完全开发出来.

只要我们努力学习android,对理想,对生活都会有很大的补益.

因此,开发这样一套很简单的记事本软件对我们来讲是一件很有必要的事情,在下面的各章中我们将以开发安卓记事本软件为例,谈谈其开发过程和所涉及到的问题及解决方法。

本文中所做的主要工作如下:

(1)开发环境及开发工具的安装及配置 (2)阐述整个记事本的系统结构及工作原理;

(3) 设计实现”添加新记事”,”编辑内容”,”删除当前记事”这三个

主要的功能模块。

(4) 分析并解决实现中的若干技术问题,像组件的选择以及保存方式的选择。

(5)进行测试并分析结果。 1.3 课题的可行性分析 1.3.1 课题调研

(1)与实践活动和相关的文件和资料由作者本人网络查找,以及老师帮助。 (2)具有遇到问题,具有独立思考,耐心钻研,向老师虚心求教的良好态度。 (3)关于技术方面的难题,跟指导老师面谈。 1.3.2 可行性分析

1)技术可行性-----本项目仅需要一台装有eclipse及配置好android开发环境的计算机即可,对计算机本身有一定的要求,它可以使用windows xp及其以上版本,mac os,linux等操作系统。

2) 经济可行性-----由于本软件开发只有一个单个人,一台电脑就行,基本不需要太大的成本.在经济上完全可行。

3) 操作可行性-----界面设计时充分考虑用户的习惯以及手机方面的局限性,程序必须要很简单;本程序只涉及到开发环境配置,安卓组件的熟悉,以及安卓平台上的数据存储。并没有太大的难度,所以,该项目完全有可操作性.

第二章 开发环境的安装和配

2.1开发包及其工具的介绍

Android以java作为开发语言,jdk是进行java开发时必需的开发包.eclipse是一款非常优秀的开源IDE,在大量插件的”配合”下,完全可以满足从企业级java应用到手机终端java游戏的开发.Google官方也提供了基于Eclipse的android开发插件ADT,所以本软件开发选择Eclipse作为开发IDE.

2.2 Android开发平台搭建步骤:

首先到http://www.eclipse.org/downloads/下载Eclipse集成开发环境并且解压,这里推荐下载Java EE 集成版本,可以为平台的搭建省下不少工作。接着再去http://java.sun.com/javase/downloads/index.jsp 站点下载SDK后安装,下载http://dl.google.com/android/android-sdk-windows-1.5_r1.zip,Android SDK1.5后解压。第一步下载工序就结束了。

②双击Eclipse解压后目录中的eclipse.exe然后启动,选择Eclipse菜单中的Help-> Install New Software-> 选项卡上的Available Software,点击右侧的“Add”输入http://dl-ssl.google.com/android/eclipse/后确定,然后在“Work with”下拉菜单中选择刚才输入的网址。过一会就会出现一个Developer Tools选项,勾上以后点击Next以后Eclipse会自动网上查找Android 开发工具插件,然后找到Android DDMS和Android Development Tools,选中这两个点击Finish,Eclipse就会自动下载并安装Android插件了,最后会提示重启Eclipse。

③重启后选择Eclipse菜单中的Windows-> Preferences 在左侧的Android项目中SDK Location中填入Android SDK解压后的目录,然后点击Apply。 ④在WindowsXP的系统变量中的path变量中添加一个值,该值指向解压后的 4 Android SDK目录下的tools文件夹。

第三章 程序的设计

3.1 记事本组件的设计

本项目涉及到以下组件:

TextView:“记事本”,“新建记事”,“编辑记事”等标题 EditView:“记事本的标题”,“内容”等 Button:“确定”按钮

Menu:“添加新记事”,“编译内容”,“删除当前记事”等

3.2 记事本逻辑设计

1.首先是添加新记事:

如果当前没有记事,点击”menu”后只有一个菜单选项”添加新记事”,写完记事之后,点击”确定”进行保存 2.”编辑内容”:

选中要编辑的那一个记事,然后点击”menu”菜单,会出现三个选项”新建记事”,” 编辑内容”,”删除当前记事”,点击”编辑内容”对被选中的记事进行编辑,然后点击”确定”加以保存.

3.”删除记事”

点击上下键,选中要删除的记事,然后点击”menu”菜单,然后点击”删除当

前记事”,对选中的记事加以删除.

3.3记事本存储实现

Android 中一共提供了5种数据存储方式,但是由于存储的这些数据都是其

应用程序私有的,所以如果需要在其他应用程序中使用这些数据.就要使用android提供的ContentProviders.

ContentProviders:Android提供的一个特殊的存储数据的类型,它提供了一套标准的接口来获取,操作数据.

4 Shared Preference:用来存储”key-value paires”格式的数据,它是一个轻量级的键值存储机制,只可以存储基本数据类型.

Files:它通过FileInputStream 和 FileOutputStream对文件进行操作.但 是在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件

SQLite:android提供的一个标准的数据库,支持SQL语句 Network:通过网络来存储和获得数据

3.3.1数据存储之sharedPreferences

通过getpreferences()方法来获得Preference对象,

通过”SharePreferences.Editor editor=uiState.edit;”取得编辑对象,然后通过”editor.put„„()”方法添加数据,最后通过commit()方法来保存数据.

3.3.2数据存储之files

我们可以通过自定义的save()方法来保存数据,同时也可以通过load()方法来获取文件中的数据.

boolean save() { Properties properties = new Properties(); /* 将数据打包成Properties */ properties.put(\"bmusic\ 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; } /* 装载、读取数据 */ void load() { /* 构建Properties对对象 */ Properties properties = new Properties(); try { /* 开发文件 */ FileInputStream stream = this.openFileInput(\"music.cfg\"); /* 读取文件内容 */ properties.load(stream); } catch (FileNotFoundException e)

5 { return; } catch (IOException e) {

6 return; } /* 取得数据 */ mbMusic = Boolean.valueOf(properties.get(\"bmusic\").toString()); }

3.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(); /* 从上面的链接中取得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 String(baf.toByteArray()); }

7

catch (Exception e) {

myString = e.getMessage(); } 另外由于在程序中访问了外部网络,我们需要在AndroidManifest.xml文件中给予权限,代码如下 3.3.4数据存储之SQLite

这个方法在数据保存中非常常用.只是它只会被一个程序读取数据,不能

在不同程序间共享数据.

/*创建和打开数据库*/

mSQLiteDatabase = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null); /*创建表*/

mSQLiteDatabase.execSQL(CREATE_TABLE); /* 删除数据库 */ public void DeleteDataBase() { this.deleteDatabase(DATABASE_NAME); this.finish(); }

/* 删除一个表 */ public void DeleteTable() { mSQLiteDatabase.execSQL(\"DROP TABLE \" + TABLE_NAME); this.finish(); }

8

/* 更新一条数据 */ public void UpData() { ContentValues cv = new 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, miCount); 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));

9 miCount--; if (miCount < 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是ListView和后台数据的桥梁 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 });

10 /* 将adapter添加到m_ListView中 */ m_ListView.setAdapter(adapter); } }

3.3.5 数据存储之ContentProviders

ContentProviders: Android提供的一个特殊的存储数据的类型,它提供了一套标准的接口来获取,操作数据.

查询数据:可以使用ContentProvider.query()或者Activity.managedQuery()方法 修改数据:通过ContentResolver.update()方法可以用来修改数据 添加数据:通过ContentResolver.insert()方法来增加一条数据 删除数据:通过ContentResolver.delete()方法来删除一条记录

第四章 程序的开发 4.1主activity的设计

当选择”新建记事本”,”编辑内容”,”删除当前记事”等菜单选项时对应的操作

public boolean onOptionsItemSelected(MenuItem item) { switch (item.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;

11 // 编辑当前数据内容 case MENU_ITEM_EDIT: Intent intent = new Intent(this, ActivityDiaryEditor.class); intent.setData(item.getIntent().getData()); intent.setAction(ActivityDiaryEditor.EDIT_DIARY_ACTION); startActivity(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); }

4.2编辑内容

protected void onCreate(Bundle 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);

12

if (EDIT_DIARY_ACTION.equals(action)) {// 编辑记事本 mState = STATE_EDIT; mUri = intent.getData();

mCursor = managedQuery(mUri, PROJECTION, null, null, null); mCursor.moveToFirst();

String title = mCursor.getString(1); mTitleText.setTextKeepState(title); String body = mCursor.getString(2); mBodyText.setTextKeepState(body);

setResult(RESULT_OK, (new Intent()).setAction(mUri.toString())); setTitle(\"编辑记事\");

} else if (INSERT_DIARY_ACTION.equals(action)) {// 新建日记 mState = STATE_INSERT; setTitle(\"新建记事\"); } else {

Log.e(TAG, \"no such action error\"); finish();

etContentResolver().insert(Diary.DiaryColumns.CONTENT_URI, values); private void updateDiary() { String title = mTitleText.getText().toString(); String body = mBodyText.getText().toString(); ContentValues values = new ContentValues(); values.put(Diary.DiaryColumns.CREATED, DiaryContentProvider .getFormateCreatedDate()); values.put(Diary.DiaryColumns.TITLE, title); values.put(Diary.DiaryColumns.BODY, body); getContentResolver().update(mUri, values,

13 null, null); } }

4.3删除记事

private void renderListView() { Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null, null, DiaryColumns.DEFAULT_SORT_ORDER); SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.diary_row, cursor, new String[] { DiaryColumns.TITLE, DiaryColumns.CREATED }, new int[] { R.id.text1, R.id.created }); setListAdapter(adapter);

}

第五章 程序的测试

1.添加新记事 如图:5.1

第六章 总结

经过几个月的学习,研究和开发,我终于按时完成了这个项目。通过这个项目的研发,我终于认识到理论跟实际还是有很大的不同的。对安卓的基本知识进行了锻炼,对自己的成果也有了很大的成就感,激发了我对安卓研究的巨大兴趣。 通过此次设计过程我会到了许多知识,这也是在大学里第一次比较完整的完成一个小项目,虽然过程中遇到了许多困难,在同学和老师的帮助下一一克服了。通过不断的发现问题,总结问题和解决问题的过程,使我在此次毕业设计活动中不断的提高,和得到了宝贵的经验。 参考文献

[1]杨丰盛,《Android 应用开发揭秘》,机械工业出版社, 出版2008年9月 [2]邓凡平,《深入理解android》,机械工业出版社,出版2010年8月 [3] 柯元旦,《Android内核剖析》,电子工业出版社,出版2006年09月 [4] 吴亚峰、索依娜等,《Android核心技术与实例详解》电子工业出版社,2010-10出版

[5] 郭宏志,《Android应用开发详解》,电子工业出版社,2010-06出版 [6] 靳岩、 姚尚朗编著,《Android开发入门与实战》,人民邮电出版社,2009-07出版

因篇幅问题不能全部显示,请点此查看更多更全内容