基于android的日记本开发.docx_第1页
基于android的日记本开发.docx_第2页
基于android的日记本开发.docx_第3页
基于android的日记本开发.docx_第4页
基于android的日记本开发.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

西南科技大学 课程设计报告课程名称: 软件设计基础 设计名称: 基于android的日记本开发 姓 名: 学 号: 班 级: 通信1003班 指导教师: 起止日期: 11.2812.12 西南科技大学信息工程学院制16方 向 设 计 任 务 书学生班级: 通信1003班 学生姓名: 学号: 设计名称: 基于android的日记本开发 起止日期: 11.2812.12 指导教师: 设计要求:1. 安装android开发环境,学习使用eclipse,用java编程语言开发一个简易日记本;2. 所开发的日记本具有新建文件,删除文件,保存文件等基本功能,文件的标题后面会显示出保存日期;3. 文件保存后可以查看已建立的文件,打开文件可以编辑和删除内容,并保存更改后的文件内容;4. 协调的呈现出图标和按钮的布局,菜单功能要相对简单,不能复杂,以便于让用户方便操作。方 向 设 计 学 生 日 志时间设计内容11.2812.1看资料文档,安装开发环境,熟悉Android开发知识;12.212.3安装及配置开发工具盒开发环境;12.412.9确定方案,从概要设计到程序开发,并调试程序;12.1012.11功能测试,分析结果,撰写课程设计报告。基于android的日记本开发 一、 摘要(150-250字)伴随着无线移动设备的迅速发展,手机的日益普及成为主流,在这一关键时期,Android系统的推出使手机发展进入了一个新的领域。世界上一些知名移动设备生产厂商对于Android智能机的开发热情日益提高,Android系统的使用人群正在急速提升,Android应用程序的多样化使人们从手机中获得更多乐趣,方便着人们的生活,使Android得到了社会越来越多的认同。本次设计主要描述了基于android开发一个简易日记本的技术方法。关键字:Android; DbAdapter;Activity;diary二、 设计目的和意义在中国,手机已经成为人们日常生活必不可少的一部分,智能手机在高校人群中逐渐得到了普及,Android手机凭借其优秀的系统性能以及良好的用户体验迅速得到了高校师生的青睐。在高校中,上课并不像高中时期有固定的教室和固定的时间,高校课程种类繁多,并且上课地点和时间不固定,一周内极少会出现重复课程,所以要将课程表完整的记忆下来是一项很艰难的事情,很多同学不得不随身携带一张课表来防止遗忘上课,但是还是不能完全避免该问题的发生,同时,作为一个当今高速发展的时代的成员,适应这个社会是必不能少的,在各种社交场合中,记住一些必须的信息很重要,而它们往往又繁琐又多,不易人为记住。基于这些问题,有必要设计一款方便小巧的简易日记本程序,可以让用户自定义文件,记住上课时间和地点,从而避免遗忘上课的事情出现,同时记住那些琐碎却有意义的小信息。而且,由于android系统市场的开放性和服务免费,它的应用程序方面就成了一块非常大的市场,。三、 设计原理用户在第一次进入程序时会看到到一个日记本的主界面,可进行日记文件的新建和删除操作,按menu键可以选择“帮助”和“退出”,程序主界面使用course_activity.java展示记录,从Diary_activity, DiaryEditActivity类中可以新建和删除日记信息,并在主界面中显示。程序的配置信息主要存在DbAdapter中,该信息在数据显示时读取必要的配置信息,在按钮监听函数中监听系统时间变化用来实现日记的创建功能。BaseColumns 是一个接口,里边有两个变量,一个是_ID=_id,一个是_COUNT=_ count 。在Android当中,每一个数据库表至少有一个字段,而且这个字段是_id。所以当我们构造列名的辅助类时,直接实现BaseColumns ,这样我们便默认地拥有了_id字段。在我们的日记本的数据表里,一共有4个字段,分别是:id、title、body、created。在Android中鼓励使用内部类,这样不但使用方便,而且执行效率也高是请求数据的类型,例如,在例子当中定义的类型是diary。当然这一部分可以是0个片段或者多个片段构成,如果Content Provider只是暴露出了一种类型的数据,那么这部分可以为空,但是如果暴露出了多种,尤其是包含子类的时候,就不能为空,1这部分是允许为空的,如果为空,表示请求全部数据;如果不为空,表示请求特定ID的数据。DatabaseHelper是操作数据库的辅助类,通过这个类我们可以生成数据库,并且维护这个数据库。 在DiaryContentProvider中,我们定义了一些变量和常量,其中这些常量主要是描述数据库的信息。在删除方法中,rowId = uri.getPathSegments().get(1)负责得到rowId的值。 getPathSegments()方法得到一个string的list, db.delete(DIARY_TABLE_NAME, DiaryColumns._ID + = + rowId, null)是标准的SQLite删除操作。update()是更新一条数据的方法, 使用ContentProvider时首先得到SQLiteDatabase,然后得到rowId,最后再调用db.update(DIARY_ TABLE_NAME, values, DiaryColumns._ID + =+ rowId, null)语句执行更新工作。其主要流程图如下: 小小日记本功能模块:底部标签Tab标签 新建手机日记日记列表退出帮助设置日记类型新建日记手机日历四、 详细设计步骤简易日记本应该具有日记本的基本功能,比如新建,编辑,删除,保存等,从这几方面初步想到应该有一个主类负责调用其他负责实现功能的类,这样整个程序会比较清晰,通过流程分析和可行性分析之后我开始查阅资料编写程序,本程序主要由六个类组成,它们分别为Dbadapter,help-activity,lookDiary,MainActivity,diary-activity和DiaryEditActivity ,1.其中MainActivity类为整个应用的主Activity,其主要方法如下:l onCreate:Activity主要重写方法之一,实现程序初始化和界面展示;l find_and_modify_button:寻找并点击按钮;l onClick(View v):点击当前所选按钮;l onCreateOptionMenu:实现Option菜单的创建;l onOptionsItemSelected:实现菜单项的点击事件响应;界面设计方面通过RelativeLayout实现布局,使用了TextView,ImageButton文件列表通过ListView实现界面展示。该类通过继承ListActivity类,用来显示ListView中的数据并实现对ListView上ImageView控件点击的统一响应。其主要代码:public class MainActivity extends Activity /菜单选项public static final int HELP = Menu.FIRST;public static final int EXIT = Menu.FIRST + 1; /* Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setTitle(小小日记本); find_and_modify_button(); Toast.makeText(MainActivity.this, 欢迎使用简易日记本, Toast.LENGTH_SHORT).show(); private void find_and_modify_button() / TODO Auto-generated method stubButton btn_diary = (Button) findViewById(R.id.btn_diary);btn_diary.setOnClickListener(diary_listener);private Button.OnClickListener diary_listener = new OnClickListener()public void onClick(View v) / TODO Auto-generated method stubIntent intent = new Intent();intent.setClass(MainActivity.this, diary_activity.class);startActivity(intent);/* menu.findItem(EXIT_ID);找到特定的MenuItem * MenuItem.setIcon.可以设置menu按钮的背景 */public boolean onCreateOptionsMenu(Menu menu) super.onCreateOptionsMenu(menu);menu.add(0, HELP, 0, 帮助).setIcon(R.drawable.helps);menu.add(0, EXIT, 0, 退出).setIcon(R.drawable.exit);return true;public boolean onOptionsItemSelected(MenuItem item) switch (item.getItemId() case HELP: Intent help_intent = new Intent(); help_intent.setClass(MainActivity.this, help_activity.class); startActivity(help_intent);break;case EXIT: finish(); break;return super.onOptionsItemSelected(item);2. help-activity和lookDiary类为实现添加课程界面的Activity,主要实现由用户选择和输入文件信息,并将所有的输入信息添加到数据库中。主要方法如下: l onCreate:新建文件信息;l updateListView:更新当前文件内容;l onListItemClick:提醒执行删除操作;l OnClickListener:按钮监听函数;l onClick:实现button点击事件的响应;l lookDiary:继承ListActivity;主要代码:public class help_activity extends Activity protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.help);setTitle(小小日记本);setTitle(帮助);public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.diary_list);setTitle(小小日记本);mDbHelper = new DbAdapter(this);updateListView();/更新当前的listacvitityprivate void updateListView() mDbHelper.open();mDiaryCursor = mDbHelper.getAllNotes();startManagingCursor(mDiaryCursor);String from = new String DbAdapter.KEY_TITLE,DbAdapter.KEY_CREATED ;int to = new int R.id.text1, R.id.created ;SimpleCursorAdapter notes = new SimpleCursorAdapter(this,R.layout.diary_row, mDiaryCursor, from, to);setListAdapter(notes);mDbHelper.closeclose();/ 需要对position和id进行一个很好的区分/ position指的是点击的这个ViewItem在当前ListView中的位置/ 每一个和ViewItem绑定的数据,肯定都有一个id,通过这个id可以找到那条数据。protected void onListItemClick(ListView l, View v, final int position,final long id) super.onListItemClick(l, v, position, id);AlertDialog.Builder builder = new AlertDialog.Builder(lookDiary.this);builder.setMessage(确定删除?);builder.setTitle(提醒);builder.setNegativeButton(删除,new android.content.DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) mDbHelper.open();mDbHelper.deleteDiary(getListView().getItemIdAtPosition(position);updateListView();dialog.dismiss(););builder.create().show();/ show(x);/弹出对话框3. DbAdapter类为自定义的重要的数据库处理类,用来管理数据库,对数据库的所有操作都封装在这个类中,实现数据封装。主要方法如下: l private static final String DATABASE_CREATE:创建diary表;l open() throws SQLException:打开数据库;l updateDiary:更新diary表;l getAllNotes:得到所有日记;l deleteDiary:删除一个选定日记;l getDiary(long rowId) throws SQLException: :得到指定日记;主要代码:/创建diary表private static final String DATABASE_CREATE = create table diary +(_id integer primary key autoincrement, + title text not null, body text not null, created text not null);/声明初始值private static final String DATABASE_NAME = database.db;private static final String DATABASE_TABLE_DIARY = diary;private static final int DATABASE_VERSION = 1;private final Context mCtx;/数据库类private static class DatabaseHelper extends SQLiteOpenHelper DatabaseHelper(Context context) super(context, DATABASE_NAME, null, DATABASE_VERSION);public void onCreate(SQLiteDatabase db) db.execSQL(DATABASE_CREATE);Log.e(create, 111);public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) db.execSQL(DROP TABLE IF EXISTS diary);db.execSQL(DROP TABLE IF EXISTS course);onCreate(db);public DbAdapter(Context ctx) this.mCtx = ctx;/打开数据库public DbAdapter open() throws SQLException mDbHelper = new DatabaseHelper(mCtx);mDb = mDbHelper.getWritableDatabase();Log.e(open, 222);return this;/关闭数据库public void closeclose() Log.e(close, asdf);mDbHelper.close();/创建一个日记public long createDiary(String title, String body) ContentValues initialValues = new ContentValues();initialValues.put(KEY_TITLE, title);initialValues.put(KEY_BODY, body);Calendar calendar = Calendar.getInstance();String created = calendar.get(Calendar.YEAR) + 年+ calendar.get(Calendar.MONTH) + 月+ calendar.get(Calendar.DAY_OF_MONTH) + 日;initialValues.put(KEY_CREATED, created);return mDb.insert(DATABASE_TABLE_DIARY, null, initialValues);/删除选定日记public boolean deleteDiary(long rowId) return mDb.delete(DATABASE_TABLE_DIARY, KEY_ROWID + = + rowId, null) 0;/得到所有日记public Cursor getAllNotes() return mDb.query(DATABASE_TABLE_DIARY, new String KEY_ROWID, KEY_TITLE,KEY_BODY, KEY_CREATED , null, null, null, null, null);/得到制定日记public Cursor getDiary(long rowId) throws SQLException Cursor mCursor =mDb.query(true, DATABASE_TABLE_DIARY, new String KEY_ROWID, KEY_TITLE,KEY_BODY, KEY_CREATED , KEY_ROWID + = + rowId, null, null,null, null, null);if (mCursor != null) mCursor.moveToFirst();return mCursor;/更新diary表public boolean updateDiary(long rowId, String title, String body) ContentValues args = new ContentValues();args.put(KEY_TITLE, title);args.put(KEY_BODY, body);Calendar calendar = Calendar.getInstance();String created = calendar.get(Calendar.YEAR) + 年+ calendar.get(Calendar.MONTH) + 月+ calendar.get(Calendar.DAY_OF_MONTH) + 日;args.put(KEY_CREATED, created);return mDb.update(DATABASE_TABLE_DIARY, args, KEY_ROWID + = + rowId, null) 0;package com.xiaoyue.diarybook;4. Diary_activity类和DiaryEditActivity类实现日记的创建和删除。主要方法如下:l updateListView():更新当前的listacvitity;l onActivityResult:更新当前文件;l onCreateOptionsMenu:创建一个菜单;l onMenuItemSelected:菜单选择;l savedInstanceState:保存日记;l deleteDiary:删除日记; l DiaryEditActivity::编辑日记;主要代码:public class diary_activity extends ListActivity /回复的关键字private static final int ACTIVITY_CREATE = 0;private static final int ACTIVITY_EDIT = 1;/菜单的选择private static final int INSERT_ID = Menu.FIRST;private static final int DELETE_ID = Menu.FIRST + 1;private DbAdapter mDbHelper;private Cursor mDiaryCursor;public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.diary_list);setTitle(小小日记本);mDbHelper = new DbAdapter(this);updateListView();/更新当前的listacvitityprivate void updateListView() mDbHelper.open();mDiaryCursor = mDbHelper.getAllNotes();startManagingCursor(mDiaryCursor);String from = new String DbAdapter.KEY_TITLE,DbAdapter.KEY_CREATED ;int to = new int R.id.text1, R.id.created ;SimpleCursorAdapter notes = new SimpleCursorAdapter(this,R.layout.diary_row, mDiaryCursor, from, to);setListAdapter(notes);mDbHelper.closeclose();/创建一个菜单public boolean onCreateOptionsMenu(Menu menu) super.onCreateOptionsMenu(menu);menu.add(0, INSERT_ID, 0,新建).setIcon(R.drawable.new_course);menu.add(0, DELETE_ID, 0, 删除).setIcon(R.drawable.delete);return true;/菜单选择public boolean onMenuItemSelected(int featureId, MenuItem item) Intent intent;switch (item.getItemId() case INSERT_ID:createDiary();return true;case DELETE_ID:intent= new Intent(this, lookDiary.class);startActivity(intent);/updateListView();/*mDbHelper.open();mDbHelper.deleteDiary(getListView().getSelectedItemId();mDbHelper.closeclose();updateListView();return true;*/return super.onMenuItemSelected(featureId, item); private void createDiary() Intent i = new Intent(this, DiaryEditActivity.class);startActivityForResult(i, ACTIVITY_CREATE); / 需要对position和id进行一个很好的区分/ position指的是点击的这个ViewItem在当前ListView中的位置/ 每一个和ViewItem绑定的数据,肯定都有一个id,通过这个id可以找到那条数据。protected void onListItemClick(ListView l, View v, int position, long id) super.onListItemClick(l, v, position, id);Cursor c = mDiaryCursor;c.moveToPosition(position);Intent i = new Intent(this, DiaryEditActivity.class);i.putExtra(DbAdapter.KEY_ROWID, id);i.putExtra(DbAdapter.KEY_TITLE, c.getString(c.getColumnIndexOrThrow(DbAdapter.KEY_TITLE);i.putExtra(DbAdapter.KEY_BODY, c.getString(c.getColumnIndexOrThrow(DbAdapter.KEY_BODY);startActivityForResult(i, ACTIVITY_EDIT); protected void onActivityResult(int requestCode, int resultCode,Intent intent) super.onActivityResult(requestCode, resultCode, intent);updateListView();public class DiaryEditActivity extends Activity private EditText mTitleText;private EditText mBodyText;private Long mRowId;private DbAdapter mDbHelper;protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);mDbHelper = new DbAdapter(this);setContentView(R.layout.diary_edit);setTitle(小小日记本);mTitleText = (EditText) findViewById(R.id.title);mBodyText = (EditText) findViewById(R.id.body);Button confirmButton = (Button) findViewById(R.id.confirm);mRowId = null;Bundle extras = getIntent().getExtras();/判断是否为编辑状态if (extras != null) String title = extras.getString(DbAdapter.KEY_TITLE);String body = extras.getString(DbAdapter.KEY_BODY);mRowId = extras.getLong(DbAdapter.KEY_ROWID);if (title != null) mTitleText.setText(title); if (body != null) mBodyText.setText(body); confirmButton.setOnClickListener(new View.OnClickListener() public void onClick(View view) mDbHelper.open();String title = mTitleText.getText().toString();String body = mBodyText.getText().toString();if (mRowId != null) mDbHelper.updateDiary(mRowId, title, body); elsemDbHelper.createDiary(title, body);Intent mIntent = new Intent();setResult(RESULT_OK, mIntent);mDbHelper.closeclose();finish(););五、 设计结果及分析打开程序,点击运行,出现以下界面: 解锁后:这时点击menu出现“帮助”和“退出”选项;点击“日记管理”, 当运行程序填充数据后单击确定按钮,执行confirmButton的单击监听器当中的onClick()函数,进入如下界面:点击menu出现“新建”和“删除”选项:选择“新建”,输入标题:Software course design; 内容: a diary book;点击屏幕下方“保存”。此过程执行代码:protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); mDbHelper = new DbAdapter(this);setContentView(R.layout.diary_edit);setTitle(小小日记本);mTitleText = (EditText) findViewById(R.id.title);mBodyText = (EditText) findViewById(R.id.body);Button confirmButton = (Button) findViewById(R.id.confirm);保存后若想删除日记,只需在日记列表点击menu,选择“删除”项;执行代码:public boolean deleteDiary(long rowId) return mDb.delete(DATABASE_TABLE_DIARY, KEY_ROWID + = + rowId, null) 0; super.onListItemClick(l, v, position, id);AlertDialog.Builder builder = new AlertDialog.Builder(lookDiary.this);builder.setMessage(确定删除?);builder.setTitle(提醒);builder.setNegativeButton(删除,new android.content.DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int which) mDbHelper.open();mDbHelper.deleteDiary(getListView().getItemIdAtPosition(position);updateListView();dialog.dismiss();界面过程如下:六、 总结关于Activity,在一个Activity中可使用多个View 如果把Activity看作MVC中的Control,它负责管理UI和接受事件(包括用户的输入),虽然说一个Activity通常对应一个屏幕,但事实上,是可以只用一个Activity管理多个不同的View来实现简单的逻辑。 首先增加一个新的资源描述layout/second.x

温馨提示

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

评论

0/150

提交评论