简易的记事本android专业课程设计.doc
《简易的记事本android专业课程设计.doc》由会员分享,可在线阅读,更多相关《简易的记事本android专业课程设计.doc(26页珍藏版)》请在咨信网上搜索。
河南科技学院 《物联网移动应用开发》课程设计汇报 设 计 题 目: 简易记事本 班 级: 物联网131班 学 号: 1554119 姓 名: 指 导 教 师: 徐睿 成 绩: 信 息 工 程 学 院 课程设计汇报说明 一、写汇报前,请认真阅读《课程设计汇报说明》。 二、打印装订要求 1、一律用A4纸,双面打印,并左侧装订。汇报正文部分均采取宋体小四。《课程设计汇报说明》页也打印。 2、课程设计概述部分占一页;课程设计内容长度依据实际需要填写;结论和指导老师评语及成绩单独占一页。确保打印格式工整。 3、指导老师评语及成绩部分由指导老师填写。 三、汇报内容要求 1、课程设计目标结合实际自己写,不要雷同。 2、课程设计原理简明说明所完成课程设计项目所包含理论知识。 3、课程设计内容 这是课程设计汇报极其关键内容。概括整个课程设计过程。(最好在上述内容基础上画出对应流图、设计思绪和设计方法,再配以对应文字进行说明。) 一、课程设计概述 1、课程设计目标 Window操作系统诞生成就了微软帝国,同时也造就了PC时代繁荣,然而现在,以Android和iPhone手机为代表智能移动设备发明和互联网云技术兴起却敲响了PC时代丧钟!这也预示着移动互联网时代(3G)已经来临。 在这个互联网繁荣时代,有一颗超新星,以它独特征能优势和人性化UI设计使它在短短几年快速占领了智能移动设备市场份额,它就是谷歌Android!这也意味着谷歌在移动互联网时代开始抢跑并领跑。 经过调查显示,大部分消费者全部会使用手机记事本功效。伴随手机记事本功效不停加强和完善,手机记事本对于大家意义,已不仅仅像通常记事簿一样简单统计,而是向着更个性化人性化方向发展。Android[1]系统是开源,它以迅猛姿势已经占领了全球二分之一多市场。记事本在生活和工作也日益凸显出它关键性,它能愈加好地帮助大家愈加好地管理自己工作和生活,极大方便了大家生活。因其开源,我们能够在之上开发安卓记事本软件,同时这也符合广大市场需求。 2、课程设计要求 设计最终作品包含设计汇报和能成功运行程序,能够达成设计指标要求。每个小组在设计完成后,要经指导老师检验。课程设计汇报每个学生一份,由学习委员收齐后统一交给指导老师。 根据课程设计进程,认真完成各个步骤,确保质量,达成目标。 3、课程设计原理 (1) 设计实现添加事件、保留事件、删除事件、导出事件、添加图片等主功效。 (2)利用Android中部分组件和事件监听处理功效实现问题。 (3)利用mysql语句来实现数据库设计为用户保留数据。 (4)使用debug调试来处理程序运行时碰到问题 二、课程设计内容 1、软件功效计划 (1)软件功效 能够提醒用户是否有已写记事本,能够进行记事本标题填写和内容填写,确定后保留。 (2) 界面设计 进入程序提醒“您还没有开始写日志呢!点击下边Menu按钮开始写日志吧!”,点击图片按钮后进入标题和内容填写界面。 2、程序设计 (1)记事本组件设计 本项目包含到以下组件: TextView:“记事本”,“新建记事”,“编辑记事”等标题。 EditView:“记事本标题”,“内容”等。 ImageButton:“写事件”,“保留”,“加图片”按钮。 Menu:“编译内容”,“删除目前记事”,“修改目前记事”,“导出目前记事” “帮助”,“相关”等。 (2)记事本逻辑设计 (i)添加新记事 假如目前没有记事,点击“listview中事件”后只有一个菜单选项“添加新记事”,写完记事以后,点击“确定”进行保留。 (ii)编辑内容 选中要编辑那一个记事,然后点击“listview中事件”菜单,会出现三个选项“新建记事”,“编辑内容”,“删除目前记事”,点击“编辑内容”对被选中记事进行编辑,然后点击“确定”加以保留。 (iii)删除记事 点击上下键,选中要删除记事,然后点击“listview中事件”菜单,然后点击“删除目前记事”,对选中记事加以删除。 (3)记事本存放实现 Android 中一共提供了5种数据存放方法,不过因为存放这些数据全部是其应用程序私有,所以假如需要在其它应用程序中使用这些数据,就要使用Android提供Content Providers。 Content Providers:Android提供一个特殊存放数据类型,它提供了一套标准接口来获取,操作数据。 Shared Preference:用来存放“key-value paires”格式数据,它是一个轻量级键值存放机制,只能够存放基础数据类型。 Files:它经过File Input Stream 和 File Output Stream对文件进行操作,不过在Android中,文件是一个应用程序私有,一个应用程序无法读写其它应用程序文件。 SQL ite:Android提供一个标准数据库,支持SQL语句。 Network:经过网络来存放和取得数据。 (i)数据存放之SQLite 经过sqlite中增删改查方法来保留、删除、修改、查找数据。来实现对数据操作。 代码: public class DBManage { private Context mContext = null; private SQLiteDatabase mSQLiteDatabase = null;//用于操作数据库对象 private DBHelper dh = null;//用于创建数据库对象 Cursor namecursor=null; private String dbName = "notepad.db"; private int dbVersion = 1; public DBManage(Context context){ mContext = context; } /** * 打开数据库 */ public void open(){ try{ dh = new DBHelper(mContext, dbName, null, dbVersion); if(dh == null){ return ; } mSQLiteDatabase = dh.getWritableDatabase(); //dh.onOpen(mSQLiteDatabase); Log.i("log", "DB is opened"); }catch(SQLiteException se){ se.printStackTrace(); Log.i("log", "open DB faile"); } } /** * 关闭数据库 */ public void close(){ mSQLiteDatabase.close(); dh.close(); Log.i("log", "DB is closed"); } //获取列表 public Cursor selectAll(){ Cursor cursor = null; try{ String sql = "select * from travels"; cursor = mSQLiteDatabase.rawQuery(sql, null); }catch(Exception ex){ ex.printStackTrace(); cursor = null; } return cursor; } public Cursor selectById(int id){ Cursor cursor = null; try{ String sql = "select * from travels where _id='" + id +"'"; cursor = mSQLiteDatabase.rawQuery(sql, null); }catch(Exception ex){ ex.printStackTrace(); cursor = null;} return cursor; } public Cursor selcetPathByName(String name){ Cursor cursor=null; try{ String sql = "select path from icons where filename='"+ name +"'"; cursor=mSQLiteDatabase.rawQuery(sql, null); Log.i("log", sql); }catch(Exception ex){ ex.printStackTrace(); Log.i("log", "select faile"); } return cursor; } //插入数据 public long insert(String title, String content){ Log.i("log", "readyto insert"); long datetime = System.currentTimeMillis(); Log.i("log", "time------>"+datetime); long l = -1; try{ ContentValues cv = new ContentValues(); cv.put("title", title); cv.put("content", content); cv.put("time", datetime); Log.i("log", "data----->"+title+content+datetime); l = mSQLiteDatabase.insert("travels", null, cv); Log.i("log", cv.toString()); Log.i("log", datetime+""+l); }catch(Exception ex){ ex.printStackTrace(); l = -1; } return l; } public long inserticonpath(String filename,String iconpath){ long l=-1; try{ Log.i("log", "ready to insert icon"); ContentValues cv = new ContentValues(); cv.put("filename",filename); cv.put("path", iconpath); l = mSQLiteDatabase.insert("icons", null, cv); Log.i("log", "insert iconname success"); }catch(Exception ex){ ex.printStackTrace(); l = -1; } return l; } //删除数据 public int delete(long id){ int affect = 0; try{ Log.i("log","try to delete the data in databases"); affect=mSQLiteDatabase.delete("travels","_id=?",new String[]{id+""}); Log.i("log", "delete success"); }catch(Exception ex){ ex.printStackTrace(); affect = -1; Log.i("log", "delete faile"); } return affect; } //修改数据 public int update(int id, String title, String content){ int affect = 0; try{ ContentValues cv = new ContentValues(); cv.put("title", title); cv.put("content", content); affect=mSQLiteDatabase.update("travels",cv,"_id=?",new String[]{id+""}); }catch(Exception ex){ ex.printStackTrace(); affect = -1; } return affect; } } (ii)数据存放之Files 我们能够经过自定义copyfile()方法来复制数据 代码: //复制文件 public int copyfile(String from,String into){ try { copyfrom=new FileInputStream(from); copyinto=new FileOutputStream(into); Log.i("log", "fuck you"); byte[] bt = new byte[1024]; int c; while((c=copyfrom.read(bt)) > 0){ copyinto.write(bt,0,c); } copyfrom.close(); copyinto.close(); Log.i("log", "copy success"); return 1; }catch (FileNotFoundException e) { e.printStackTrace(); return -1; } catch (IOException e) { e.printStackTrace(); return -1; } } 3、程序开发 (1)主activity设计 当选择“新建记事本”,“编辑内容”,“删除目前记事”等菜单选项时对应操作 代码: public void initAdapter(){ dm.open();//打开数据库操作对象 cursor = dm.selectAll();//获取全部数据 cursor.moveToFirst();//将游标移动到第一条数据,使用前必需调用 int count = cursor.getCount();//个数 ArrayList<String> items = new ArrayList<String>(); ArrayList<String> times = new ArrayList<String>(); for(int i= 0; i < count; i++){ items.add(cursor.getString(cursor.getColumnIndex("title"))); times.add(cursor.getString(cursor.getColumnIndex("time"))); cursor.moveToNext();//将游标指向下一个 } dm.close();//关闭数据操作对象 adapter = new ListViewAdd(this,items,times);//创建数据源 } public class myOnCreateContextMenuListener implements OnCreateContextMenuListener{ public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { menu.setHeaderTitle(""); //设置选项 Log.i("log", "chooseing menu"); menu.add(0,0,0,"删除"); menu.add(0,1,0,"修改"); menu.add(0,2,0,"查看"); menu.add(0,3,0,"导出到SD卡"); } } public boolean onContextItemSelected(MenuItem item){ AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); dm.open(); switch(item.getItemId()){ case 0://删除 Log.i("log", "selectItem---->"+item.getItemId()); try{ Log.i("log", "cursor ready move "); Log.i("log", "menuInfo position "+menuInfo.position); cursor.moveToPosition(menuInfo.position); Log.i("log", "cursor move success"); adapter.removeListItem(menuInfo.position);//删除数据 adapter.notifyDataSetChanged();//通知数据源,数据已经改变,刷新界面 dm.close(); }catch(Exception ex){ ex.printStackTrace(); } break; case 1://修改 try{ cursor.moveToPosition(menuInfo.position); //用于Activity之间通讯 Intent intent = new Intent(); //通讯时数据传送 intent.putExtra("id", cursor.getString(cursor.getColumnIndex("_id"))); intent.putExtra("state", ALERT_STATE); intent.putExtra("title", cursor.getString(cursor.getColumnIndex("title"))); intent.putExtra("time", cursor.getString(cursor.getColumnIndex("time"))); intent.putExtra("content", cursor.getString(cursor.getColumnIndex("content"))); //设置并开启另一个指定Activity intent.setClass(MainActivity.this, EditTravels.class); MainActivity.this.startActivity(intent); finish(); }catch(Exception ex){ ex.printStackTrace(); } break; case 2://查看 try{ cursor.moveToPosition(menuInfo.position); Intent intent = new Intent(); intent.putExtra("id", cursor.getString(cursor.getColumnIndex("_id"))); intent.putExtra("title", cursor.getString(cursor.getColumnIndex("title"))); intent.putExtra("time", cursor.getString(cursor.getColumnIndex("time"))); intent.putExtra("content", cursor.getString(cursor.getColumnIndex("content"))); intent.setClass(MainActivity.this, CheckTravels.class); MainActivity.this.startActivity(intent); }catch(Exception ex){ ex.printStackTrace(); } break; case 3://导出 try{ cursor.moveToPosition(menuInfo.position); String title=cursor.getString(cursor.getColumnIndex("title")); String content=cursor.getString(cursor.getColumnIndex("content")); HM.htmlmanager(title, content); copyicon(title,content); Toast.makeText(MainActivity.this, "导出成功,快去SD卡\" 记事本 \"里找出来分享吧!!", Toast.LENGTH_LONG).show(); }catch(Exception ex){ Toast.makeText(MainActivity.this, "Sorry!!!导出失败!!", Toast.LENGTH_LONG).show(); ex.printStackTrace(); } break; default:; } dm.close(); return super.onContextItemSelected(item); } (2)修改内容 代码: public class EditTravels extends Activity{ private static final int SELECT_IMAGE =123; int rotate = 0; private EditText titleedit; private EditText travelsedit; private ImageButton save; private ImageButton insertimage; private ImageButton takephoto; private String idString; private int id2; private String title=""; private String travelsdata = ""; private String timeText = ""; public Cursor cursor=null; public String namestr=""; private DBManage dm=null; private Bitmap bitmap = null; private String path = null; private int state =-1; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.edittravels); titleedit=(EditText)findViewById(R.id.titleedit); travelsedit=(EditText)findViewById(R.id.travelsedit); save=(ImageButton)findViewById(R.id.save); save.setOnClickListener(new saveListener()); insertimage=(ImageButton)findViewById(R.id.insertimage); insertimage.setOnClickListener(new insertimageListener()); dm=new DBManage(this); Intent intent = getIntent(); state = Integer.parseInt(intent.getStringExtra("state")); Log.i("log", "state---->"+state); if (state==2) { idString =intent.getStringExtra("id"); Log.i("log", "id---->"+idString); id2 = Integer.parseInt(idString); title = intent.getStringExtra("title"); travelsdata = intent.getStringExtra("content"); timeText = intent.getStringExtra("time"); titleedit.setText(title); dm.open(); int i=0; int start=0; int end=0; String str1=null; String str2="["; String str4="]"; String iconname=null; SpannableString travelsSpan =new SpannableString(travelsdata); for(i=0;i<travelsdata.length();i++) { str1=travelsdata.substring(i, i+1); Log.i("log", str1); if(str1.equals(str2)) { start=i+1; } if(str1.equals(str4)) { end=i; namestr=travelsdata.substring(start,end); Log.i("log", namestr); cursor=dm.selcetPathByName(namestr); cursor.moveToFirst(); path=cursor.getString(cursor.getColumnIndex("path")); cursor.close(); namestr=null; Log.i("log", path); if(!(cursor==null)) { int count=cursor.getCount(); Log.i("log", "count----->"+count); BitmapFactory.Options options =new BitmapFactory.Options(); options.inJustDecodeBounds =true; bitmap =BitmapFactory.decodeFile(path, options); //此时返回bm为空 options.inJustDecodeBounds =false; int be = (int)(options.outHeight/ (float)100); if (be <= 0) be = 1; options.inSampleSize = be; bitmap=BitmapFactory.decodeFile(path,options); Drawable drawable = new BitmapDrawable(bitmap); drawable.setBounds(0, 0, 360, 280); ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BOTTOM); travelsSpan.setSpan(span, start-1,end+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else { Log.i("log", "insert icon faile"); } } } dm.close(); travelsedit.setText(travelsSpan); } } //保留按钮点击事件 class saveListener implements OnClickListener{ public void onClick(View v) { // TODO Auto-generated method stub title = titleedit.getText().toString(); travelsdata= travelsedit.getText().toString(); Log.i("log","title---->"+title); Log.i("log", "travels---->"+travelsdata); try{ dm.open(); if(state==1) dm.insert(title, travelsdata); if (state==2) Log.i("log", "ready to alter"); dm.update(id2, title, travelsdata); dm.close(); }catch(Exception ex){ ex.printStackTrace(); } Intent gobackIntent=new Intent(EditTravels.this,MainActivity.class); EditTravels.this.startActivity(gobackIntent); finish(); } } //插入图片点击事件 class insertimageListener implements OnClickListener{ public void onClick(View v) { Intent intent=new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); intent.putExtra("return-data", true); startActivityForResult(intent, SELECT_IMAGE); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { path=getpath(data.getData()); BitmapFactory.Options options =new BitmapFactory.Options(); options.inJustDecodeBounds =true; //获取这个图片宽和高 bitmap =BitmapFactory.decodeFile(path, options); //此时返回bm为空 options.inJustDecodeBounds =false; //计算缩放比 int be = (in- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 记事本 android 专业课程 设计
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文