版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
江苏经贸职业技术学院毕业设计(论文)题目:系(院)专业班级学号学生姓名指导教师职称指导教师职称2023年05月10日基于Android的记事本设计摘要就目前而言Android在很多领域都有广泛的使用,作为一款面向对象编程的语言,而且网络、多线程等重要的根底知识安卓都有涉及到,因此安卓言也是学习面向对象编程和网络编程的首选语言。在平时只是学习了安卓的理论知识,并没有自己独立的去完成一个设计,课本中指定课时的知识学习结束之后,毕业设计是每个学生都必须做的。能够让学生深入理解并实践在本课程中所学的有关安卓程序设计方面的语言根底、异常处理、事件处理、小应用程序以及图形用户界面设计等是本次毕业设计的目的。在这次的毕业设计中我的设计题目是基于安卓的记事本app设计。本课程设计是为了配合安卓专门设计的,帮助学生深入学习掌握安卓的开发环境,通过此次的毕业设计课题让学生更好的掌握安卓平台的编程。本次设计的基于安卓的记事本app让使用者对个人日记进行记录并且管理,可以显示日期,对用户所做的事情进行记录,相当于备忘录,当根本本里面的数据信息过多的时候可以进行删除。以上就是本次毕业设的基于安卓的记事本app所具备的主要功能。关键字:android、app、记事本NotepadAppDesignBasedonandroidabstractAtpresentJavalanguageinmanyfieldsarewidelyusedasanobject-orientedprogramminglanguage,andbasicknowledgeofJavalanguagenetwork,multithreadandotherimportantisinvolved,solearningJavalanguageisthepreferredlanguageofobject-orientedprogrammingandnetworkprogramminglanguage.Inpeacetime,onlytolearnthetheoreticalknowledgeofJava,anddonothavetheirownindependenttocompleteadesign,theknowledgeofthecoursespecifiedinthebookaftertheendofthestudy,thegraduatedesignisnecessaryforeachstudenttodo.TheJAVAprogramminglanguagefoundation,canletthestudentsunderstandandpracticewhattheyhavelearnedinthecourseofexceptionhandling,eventhandling,smallapplicationsandgraphicaluserinterfacedesignisthepurposeofthisgraduationdesign.InthisgraduationprojectinmydesigntopicisbasedontheJavaNotepadappdesign.ThiscourseisdesignedtomeettheJavaspecificallydesignedtohelpstudentslearntomastertheJavalanguage,throughthegraduationprojectforstudentstobettergrasptheJavaprogrammingtool.ThedesignoftheuserJavaNotepadbasedonapprecordsandmakethemanagementofpersonaldiary,youcandisplaythedate,timetoremindtheusertodoanevent,canalsodobeforerecording,whenthebasicdatainsidetoomuchinformationcanbedeletedin.TheaboveisbasedonthegraduationoftheJavaNotepadapphasthemainfeatures.Keywords:android,java,app,目录TOC\o"1-2"\h\z\u1绪论图2-2所示,一系列驱动模块的底层效劳包括内存管理机制,进程管理机制,一些平安管理机制的提供是该层主要的功能,同时作抽象层连接软件和硬件是Linux内核的主要作用。图2-2Linux内核层2.2.2应用程序框架层在创立应用程序时各种需要使用的高级构建块应用程序框架层都提供了。设计者想要访问核心应用程序所使用的API框架,设计人员可以很久设计的要求进行访问,当然设计人员也可以扩展该框架,只要根据设计的要求来扩展就行应用程序的框架如图2-3所示。图2-3应用程序框架层2.3Android开发技术2.3.1Activity的生命周期如2—4所示对Activity的生命周期的流程进行了详细的解释,如下三个关键的循环过程是一个Activity必须包含的:1、从开始调用Activity从onCreate(),最后onDestroy()结束调用,就是一个Activity的生命周期,初始化工作必须首先进行,对资源的清理工作是放在周期的最后一步的。2、Activity的活动周期是可视的。onStart()表示开始,onStop()就是程序结束,用户可以在屏幕上看到它,不管这个过程中Activity有没有和用户进行互动。3、Activity后台生命期是活动的。后台生命期是从onResume()到onPause()被调用结束,与用户进行互换,但是是在其期间内的其它活动之前。图2-4Activity的生命周期2.3.2界面开发技术对于设计app系统来说最根本的技术就是界面的开发,界面的开发在几乎所有的程序开发中都是需要的。合理、是否美观的界面对客户的体验是有直接的影响的,可以提高客户体验对于好的用户交互界面来说,能大大的提高APP的使用频率。设计者通过XML技术来实现AndriodUI设计,而布局是UI设计离不开的。相对布局、帧布局、线性布局、绝对布、表格布局是安卓设计系统中经常使用的五个布局,是相互嵌套的这些布局之间,设计者可以非常灵活的使用,设计者很容易就开除一些比拟复杂的UI界面布局,当然只要你的布局比拟合理。相对布局、线性布局、表格布局是本次的设计中所使用的。3需求分析3.1任务概述本次设计的目的是方便使用对对平时的时间进行记录,所有所设计的记事本软件必须具备以下的功能:个人账号的注册是必须实现的可以添加以及记录相关事件可以上传视频以及图片实现时间的显示等功能3.2功能需求用户触发事件必须先点击屏幕才能进行数据的互换。那些记事本上的相关按钮就是操作请求的相关按钮,屏幕的主要作用向用户提供输出的信息。每个事件就是来此操作人员的操作信息,如下表所示就是相关的出发事件,所有事件响应及其执行结果对于记事本系统中可能发生的都在下表中显示。事件系统响应执行结果1点击软件系统从屏幕启动系统,进入该软件,调用函数入口进入该软件,显示记事列表2选择添加记事,点击Menu添加调用函数进入添加界面3对其中一个记事点击调用查看记事函数进入详细界面4点击Menu在记事详细界面,可进行修改编辑记事修改函数调用进入修改界面5在记事详细界面点击Menu,可对记事进行删除删除函数调用删除记事6选择退出,点击Menu在记事列表界面,退出函数调用退出软件3.1.2记事本根本需求控制用户眼中的系统就是系统用例图来进行描述的,即有哪些功能用户希望系统拥有,以及完成这些功能需要通过哪些操作来进行。用户与系统交互的一种方式使用一个用例来表示。正如前面介绍过的,从参与者的角度分析系统就是识别用例的最好方法。在本次设计的Android记事本app系统中,用户就是首先的参与者。如下列图所示就是系统的E-R图,该系统应该具有何种功能它从用户角度描述了。记事本记事本软件设置视频及图片添加记事个人信息软件设置视频及图片添加记事个人信息3-1记事本需求E-R图4工程概要设计4.1功能模块设计基于对记事本的功能进行整体分析之后,设计了如图4—1所示的功能模块构成。CalendarPadCalendarPadNotePadMonthNotePadMonthYearYear图4-1系统模块结构图4.2工程使用流程图工程的使用流程,如图4-2所示程序初始化开始程序初始化开始获取当前系统时间年份等数据获取当前系统时间年份等数据计算,绘制屏幕计算,绘制屏幕创立创立保存日记文件结束结束图4-2使用流程图4.3局部系统流程图〔1〕以下就是此记事本系统的登录流程图〔如图4-3〕图4-3登录流程图〔2〕数据项工程的添加〔如图4-4〕图4-4添加数据项流程图〔3〕数据项的删除流程图〔如图4-5〕图4-5删除数据项流程图4.4数据库设计4.4.1数据库概念设计根据用户需求设计出的概念性数据模型就是数据库的概念,通常用E-R模型表示,本设计数据库的概念结构如图4-6所示:图4-6E-R图4.4.2数据库逻辑设计在数据库设计中,数据库的设计应该标准合理。应该合理规划每个数据表,各个表中的属性设计应该详细齐全,命名要标准。基于数据库的概念设计,对数据库的逻辑结构设计如下:用户信息(用户名,用户密码〕事件(图片,事件,时间,具体事项〕留言信息(留言内容,留言者姓名,接收留言者姓名,留言时间〕具体实现如下表所示:表4-1用户信息表字段名主键类型主键否描述useridint(11)是用户idusernamevarchar(32)否用户名passwordvarchar(32)否用户密码表4-3留言信息表字段名主键类型主键否描述messageidint(11)否idcontentvarchar(1024)否留言内容usernamevarchar(1024)否留言者姓名receivenamevarchar(32)否接收留言者姓名leave_timetimestamp否留言时间表4-4收藏信息表5界面设计与功能实现5.1数据库连接这是一款轻型的数据库对于SQLite来说,属于关系型数据库管理系统是遵守ACID的,在一个相对小的C库中包含了SQLite。它是公有领域工程由D.RichardHipp建立的。嵌入式是它的设计目标,而且目前已经使用了它在很多嵌入式产品中,它占用非常低的资源,在嵌入式设备中,几百K的内存可能只需要。主流的操作系包括Windows/Linux/Unix它能够支持,跟很多程序语言相结合同时能够,他还拥有ODBC接口,同样比起还有两种世界著名数据库管理系统Mysql、PostgreSQL,他们的处理速度还是比拟慢的。2000年5月SQLite第一个Alpha版本诞生。目前已经开展了17年,后来SQLite3在2023年的时候发布了。个程序与之通信的独立进程对于SQLite引擎来说,跟一般的客户-效劳器存在着一定的差距,而是成为它的一个主要局部通过连接到程序中去。所以是在编程语言内的直接API调用对于主要的通信协议。它的是通过在开始一个事务的时候锁定整个数据文件而完成的简单的设计。1.ACID相关的事务2.无需安装和管理配置,就是零配置3.一个完整的数据库储存在单一磁盘文件中的4.不同字节顺序的机器间可以自由的共享数据库文件5.支持大小至2TB数据库6.大致13万行C代码,4.43M7.大局部普通数据库操作要快比一些流行的数据库在8.API简单,轻松9.TCL绑定功能具备,同时支持其他语言的绑定通过Wrapper10.注释的源代码良好,并且有测试覆盖率90%以上11.没有额外依赖,完全独立12.完全开源的源码,任何用途你都可以使用,包括商业性的13.支持多种开发语言先下载SQLite数据库的JDBC这里给出一个中文站点的URL:将下载到的包解压后得到jar包sqlitejdbc-v033-nested.jar放到%JAVA_HOME%\lib下,并且将其添加classpath系统环境变量中,我的classpath系统环境变量为;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\sqlitejdbc-v033-nested.jar在你的代码中引用这个驱动:Class.forName("org.sqlite.JDBC");Connectionconn=DriverManager.getConnection("jdbc:sqlite:filename");//filename为你的SQLite数据名称//...usethedatabase...conn.close();}图4.1记事本的界面设计packagecom.ironqin.note;importandroid.app.Activity;importandroid.content.Intent;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.AdapterView;importandroid.widget.AdapterView.OnItemClickListener;importandroid.widget.Button;importandroid.widget.ListView;publicclassMainActivityextendsActivityimplementsOnClickListener,OnItemClickListener{ privateButtonbtn_text,btn_photo,btn_video; privateListViewlistView; privateIntenti; privateMyAdaptermyAdapter; privateNotesDBnotesDB; privateSQLiteDatabasedbReader; privateSQLiteDatabasedbWriter; privateCursorcursor; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //clearDatabase();//初始化,将原有数据库内容清空 } publicvoidinitView(){ listView=(ListView)findViewById(R.id.list); btn_text=(Button)findViewById(R.id.button_text); btn_photo=(Button)findViewById(R.id.button_photo); btn_video=(Button)findViewById(R.id.button_video); btn_text.setOnClickListener(this); btn_photo.setOnClickListener(this); btn_video.setOnClickListener(this); listView.setOnItemClickListener(this); notesDB=newNotesDB(this); dbReader=notesDB.getReadableDatabase(); } @Override publicvoidonClick(Viewv){ i=newIntent(this,AddContent.class); switch(v.getId()){ caseR.id.button_text: i.putExtra("flag","1"); startActivity(i); break; caseR.id.button_photo: i.putExtra("flag","2"); startActivity(i); break; caseR.id.button_video: i.putExtra("flag","3"); startActivity(i); break; } } publicvoidselectDB(){ cursor=dbReader.query(NotesDB.TABLE_NAME,null,null,null,null,null,null); myAdapter=newMyAdapter(this,cursor); listView.setAdapter(myAdapter); } @Override protectedvoidonResume(){ super.onResume(); selectDB(); } @Override publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){ cursor.moveToPosition(position); Intentintent=newIntent(MainActivity.this,SelectAct.class); intent.putExtra(NotesDB.ID,cursor.getInt(cursor.getColumnIndex(NotesDB.ID))); intent.putExtra(NotesDB.CONTENT,cursor.getString(cursor.getColumnIndex(NotesDB.CONTENT))); intent.putExtra(NotesDB.TIME,cursor.getString(cursor.getColumnIndex(NotesDB.TIME))); intent.putExtra(NotesDB.PHOTO,cursor.getString(cursor.getColumnIndex(NotesDB.PHOTO))); intent.putExtra(NotesDB.VIDEO,cursor.getString(cursor.getColumnIndex(NotesDB.VIDEO))); startActivity(intent); } //清空数据库操作 publicvoidclearDatabase(){ dbWriter=notesDB.getWritableDatabase(); dbWriter.delete(NotesDB.TABLE_NAME,null,null); }}6.2添加记事记事本最重要的功能无非就是事件的添加以及事件的删除功能设计,软件设计如下列图4.2图4.2事件的添加packagecom.ironqin.note;importjava.io.File;importjava.sql.Date;importjava.text.SimpleDateFormat;importandroid.annotation.SuppressLint;importandroid.app.Activity;importandroid.content.ContentValues;importandroid.content.Intent;importandroid.database.sqlite.SQLiteDatabase;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;import.Uri;importandroid.os.Bundle;importandroid.os.Environment;importvider.MediaStore;importandroid.util.Log;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.ImageView;importandroid.widget.VideoView;@SuppressLint("SimpleDateFormat")publicclassAddContentextendsActivityimplementsOnClickListener{ privateStringval; privateButtonbtn_save,btn_giveup; privateImageViewimg_photo; privateVideoViewv_video; privateEditTextedit_content; privateFilephoto_file; privateFilevideo_file; privateNotesDBnotesDB; privateSQLiteDatabasedbWriter; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_content); val=getIntent().getStringExtra("flag"); btn_save=(Button)findViewById(R.id.button_save); btn_giveup=(Button)findViewById(R.id.button_giveup); img_photo=(ImageView)findViewById(R.id.img_photo); v_video=(VideoView)findViewById(R.id.v_video); edit_content=(EditText)findViewById(R.id.edit_content); btn_save.setOnClickListener(this); btn_giveup.setOnClickListener(this); v_video.setOnClickListener(this); notesDB=newNotesDB(this); dbWriter=notesDB.getWritableDatabase(); initView(); } @Override publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.button_save: addDB(); finish(); break; caseR.id.button_giveup: finish(); break; caseR.id.v_video: v_video.start(); break; } } publicvoidaddDB(){ ContentValuescontentValues=newContentValues(); contentValues.put(NotesDB.CONTENT,edit_content.getText().toString()); contentValues.put(NotesDB.TIME,getTime()); if(img_photo.getVisibility()==View.GONE) contentValues.put(NotesDB.PHOTO,"null"); else contentValues.put(NotesDB.PHOTO,photo_file+""); if(v_video.getVisibility()==View.GONE) contentValues.put(NotesDB.VIDEO,"null"); else contentValues.put(NotesDB.VIDEO,video_file+""); dbWriter.insert(NotesDB.TABLE_NAME,null,contentValues); } privateStringgetTime(){ SimpleDateFormatformat=newSimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); java.util.Datedate=newjava.util.Date(); Stringstring=format.format(date); returnstring; } privateStringgetDocumentName(){ SimpleDateFormatformat=newSimpleDateFormat("yyyy-mm-dd_HHmmss"); java.util.Datedate=newjava.util.Date(); Stringstring=format.format(date); returnstring; } publicvoidinitView(){ switch(val){ case"1"://文字 img_photo.setVisibility(View.GONE); v_video.setVisibility(View.GONE); break; case"2"://图片+文字 img_photo.setVisibility(View.VISIBLE); v_video.setVisibility(View.GONE); Intentcamera=newIntent( MediaStore.ACTION_IMAGE_CAPTURE);//开启系统相机 photo_file=newFile(Environment.getExternalStorageDirectory() .getAbsoluteFile()+"/"+getDocumentName()+".jpg");//保存照片,只在数据库中存储地址 camera.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photo_file)); startActivityForResult(camera,1); break; case"3"://视频+文字 img_photo.setVisibility(View.GONE); v_video.setVisibility(View.VISIBLE); Intentvideointent=newIntent( MediaStore.ACTION_VIDEO_CAPTURE); video_file=newFile(Environment.getExternalStorageDirectory() .getAbsoluteFile()+"/"+getDocumentName()+".mp4"); videointent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(video_file)); startActivityForResult(videointent,2); break; } } @Override protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ //TODO自动生成的方法存根 super.onActivityResult(requestCode,resultCode,data); if(requestCode==1){ Bitmapbitmap=BitmapFactory. decodeFile(photo_file.getAbsolutePath()); img_photo.setImageBitmap(bitmap); } if(requestCode==2){ v_video.setVideoURI(Uri.fromFile(video_file)); //v_video.start();//播放 } }}packagecom.ironqin.note;importandroid.annotation.SuppressLint;importandroid.content.Context;importandroid.database.Cursor;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.media.ThumbnailUtils;importvider.MediaStore;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ImageView;importandroid.widget.LinearLayout;importandroid.widget.TextView;@SuppressLint("ViewHolder")publicclassMyAdapterextendsBaseAdapter{ privateContextcontext; privateCursorcursor; privateLinearLayoutlayout; privateTextViewtv_content; privateTextViewtv_time; publicMyAdapter(Contextcontext,Cursorcursor){ this.context=context; this.cursor=cursor; } @Override publicintgetCount(){ returncursor.getCount(); } @Override publicObjectgetItem(intposition){ returnposition; } @Override publiclonggetItemId(intposition){ returncursor.getPosition(); } @SuppressLint("InflateParams") @Override publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ LayoutInflaterinflater=LayoutInflater.from(context);//加载视图的权限 layout=(LinearLayout)inflater.inflate(R.layout.cell,null);//视图 tv_content=(TextView)layout.findViewById(R.id.content); tv_time=(TextView)layout.findViewById(R.id.time); ImageViewimg_photo=(ImageView)layout.findViewById(R.id.img_photo); ImageViewimg_video=(ImageView)layout.findViewById(R.id.img_video); cursor.moveToPosition(position); Stringcontent=cursor.getString(cursor.getColumnIndex("content")); Stringtime=cursor.getString(cursor.getColumnIndex("time")); Stringphoto=cursor.getString(cursor.getColumnIndex("photo")); Stringvideo=cursor.getString(cursor.getColumnIndex("video")); tv_content.setText(content); tv_time.setText(time); img_photo.setImageBitmap(getImageThumbnail(photo,200,200)); img_video.setImageBitmap(getVideoThumpnail(video,200,200, MediaStore.Images.Thumbnails.MICRO_KIND)); returnlayout; } //获取图片的缩略图 publicBitmapgetImageThumbnail(Stringuri,intwidth,intheight){ Bitmapbitmap=null; BitmapFactory.Optionsoptions=newBitmapFactory.Options(); options.inJustDecodeBounds=true; bitmap=BitmapFactory.decodeFile(uri,options); options.inJustDecodeBounds=false; intbeWidth=options.outWidth/width; intbeHeight=options.outHeight/height; intbe=1; if(beWidth<beHeight) be=beWidth; else be=beHeight; if(be<=0) be=1; options.inSampleSize=be; bitmap=BitmapFactory.decodeFile(uri,options); bitmap=ThumbnailUtils.extractThumbnail(bitmap,width,height ,ThumbnailUtils.OPTIONS_RECYCLE_INPUT); returnbitmap; } privateBitmapgetVideoThumpnail(Stringuri,intwidth,intheight,intkind){ Bitmapbitmap=null; bitmap=ThumbnailUtils.createVideoThumbnail(uri,kind); bitmap=ThumbnailUtils.extractThumbnail(bitmap,width,height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); returnbitmap; }}packagecom.ironqin.note;importandroid.content.Context;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;publicclassNotesDBextendsSQLiteOpenHelper{ publicNotesDB(Contextcontext){ super(context,"notes",null,1); //TODO自动生成的构造函数存根 //四个参数分别为context,数据库名,版本号 } publicstaticfinalStringTABLE_NAME="notes"; publicstaticfinalStringID="_id"; publicstaticfinalStringCONTENT="content"; publicstaticfinalStringTIME="time"; publicstaticfinalStringPHOTO="photo"; publicstaticfinalStringVIDEO="video"; @Override publicvoidonCreate(SQLiteDatabasedb){ //TODO自动生成的方法存根 db.execSQL("createtable"+TABLE_NAME+"(" +ID+"integerprimarykeyautoincrement," +CONTENT+"textnotnull," +PHOTO+"text," +VIDEO+"text," +TIME+"textnotnull)"); } @Override publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){ //TODO自动生成的方法存根 }}6.3删除/修改/删除记事图4.3事件的添加以及删除packagecom.ironqin.note;importandroid.app.Activity;importandroid.content.Intent;importandroid.database.sqlite.SQLiteDatabase;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;import.Uri;importandroid.os.Bundle;importvider.MediaStore;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.ImageView;importandroid.widget.TextView;importandroid.widget.VideoView;publicclassSelectActextendsActivityimplementsOnClickListener{privateButtonbtn_delete,btn_back,btn_play;privateImageViewdetail_photo;privateVideoViewdetail_video;privateTextViewdetail_text;privateNotesDBnotes;privateSQLiteDatabasedbWriter;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_select);btn_delete=(Button)findViewById(R.id.button_delete);btn_back=(Button)findViewById(R.id.button_back);btn_play=(Button)findViewById(R.id.button_play);detail_photo=(ImageView)findViewById(R.id.detail_photo);detail_video=(VideoView)findViewById(R.id.detail_video);detail_text=(TextView)findViewById(R.id.detail_text);btn_delete.setOnClickListener(this);btn_back.setOnClickListener(this);btn_play.setOnClickListener(this);notes=newNotesDB(this);dbWriter=notes.getWritableDatabase();//修改权限if(getIntent().getStringExtra(NotesDB.PHOTO).equals("null")){//没有图片detail_photo.setVisibility(View.GONE);}else{detail_photo.setVisibility(View.VISIBLE);}if(getIntent().getStringExtra(NotesDB.VIDEO).equals("null")){//没有视频detail_video.setVisibility(View.GONE);}else{detail_video.setVisibility(View.VISIBLE);btn_play.setVisibility(View.VISIBLE);}detail_text.setText(getIntent().getStringExtra(NotesDB.CONTENT));Bitmapbitmap=BitmapFactory.decodeFile(getIntent().getStringExtra(NotesDB.PHOTO));detail_photo.setImageBitmap(bitmap);detail_video.setVideoURI(Uri.parse(getIntent().getStringExtra(NotesDB.VIDEO)));}@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.button_delete:deleteListView();finish();break;caseR.id.button_back:finish();break;caseR.id.button_play:detail_video.start();break;}}publicvoiddeleteListView(){dbWriter.delete(NotesDB.TABLE_NAME,"_id="+getIntent().getIntExtra(NotesDB.ID,0),null);}}packagecom.ironqin.note;importandroid.app.Activity;importandroid.content.Intent;importandroid.database.sqlite.SQLiteDatabase;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;import.Uri;importandroid.os.Bundle;importvider.MediaStore;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.ImageView;importandroid.widget.TextView;importandroid.widget.VideoView;publicclassSelectActextendsActivityimplementsOnClickListener{ privateButtonbtn_delete,btn_back,btn_play; privateImageViewdetail_photo; privateVideoViewdetail_video; privateTextViewdetail_text; privateNotesDBnotes; privateSQLiteDatabasedbWriter; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_select); btn_delete=(Button)findViewById(R.id.button_delete); btn_back=(Button)findViewById(R.id.button_back); btn_play=(Button)findViewById(R.id.button_play); detail_photo=(ImageView)findViewById(R.id.detail_photo); detail_video=(VideoView)findViewById(R.id.detail_video); detail_text=(TextView)findViewById(R.id.detail_text); btn_delete.setOnClickListener(this); btn_back.setOnClickListener(this); btn_play.setOnClickListener(this); notes=newNotesDB(this); dbWriter=notes.getWritableDatabase();//修改权限 if(getIntent().getStringExtra(NotesDB.PHOTO).equals("null")){//没有图片 detail_photo.setVisibility(View.GONE); } else{ detail_photo.setVisibility(View.VISIBLE); } if(getIntent().getStringExtra(NotesDB.VIDEO).equals("null")){//没有视频 detail_video.setVisibility(View.GONE); } else{ detail_video.setVisibility(View.VISIBLE); btn_play.setVisibility(View.VISIBLE); } detail_text.setText(getIntent().getStringExtra(NotesDB.CONTENT)); Bitmapbitmap=BitmapFactory.decodeFile(getIntent().getStringExtra(NotesDB.PHOTO)); detail_photo.setImageBitmap(bitmap); detail_video.setVideoURI(Uri.parse(getIntent().getStringExtra(NotesDB.VIDEO))); } @Override publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.button_delete: deleteListView(); finish(); break; caseR.id.button_back: finish(); break; caseR.id.button_play:detail_video.start(); break;} } publicvoiddeleteListView(){ dbWriter.delete(NotesDB.TABLE_NAME, "_id="+getIntent().getIntExtra(NotesDB.ID,0),null);}}packagecom.ironqin.note;importandroid.app.Activity;importandroid.content.Intent;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.AdapterView;importandroid.widget.AdapterView.OnItemClickListener;importandroid.widget.Button;importandroid.widget.ListView;publicclassMainActivityextendsActivityimplementsOnClickListener,OnItemClickListener{ privateButtonbtn_text,btn_photo,btn_video; privateListViewlistView; privateIntenti; privateMyAdaptermyAdapter; privateNotesDBnotesDB; privateSQLiteDatabasedbReader; privateSQLiteDatabasedbWriter; privateCursorcursor; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //clearDatabase();//初始化,将原有数据库内容清空 } publicvoidinitView(){ listView=(ListView)findViewById(R.id.list); btn_text=(Button)findViewById(R.id.button_text); btn_photo=(Button)findViewById(R.id.button_photo); btn_video=(Button)findViewById(R.id.button_video); btn_text.setOnClickListener(this); btn_photo.setOnClickListener(this); btn_video.setOnClickListener(this); listView.setOnItemClickListener(this); notesDB=newNotesDB(this); dbReader=notesDB.getReadableDatabase(); } @Override publicvoidonClick(Viewv){ i=newIntent(this,AddContent.class); switch(v.getId()){ caseR.id.button_text: i.putExtra("flag","1"); startActivity(i); break; caseR.id.button_photo: i.putExtra("flag","2"); startActivity(i); break; caseR.id.button_video: i.putExtra("flag","3"); startActivity(i); break; } } publicvoidselectDB(){ cursor=dbReader.query(NotesDB.TABLE_NAME,null,null,null,null,null,null); myAdapter=newMyAdapter(this,cursor); listView.setAdapter(myAdapter); } @Override protectedvoidonResume(){ super.onResume(); selectDB(); } @Override publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){ cursor.moveToPosition(position); Intentintent=newIntent(MainActivity.this,SelectAct.class); intent.putExtra(NotesDB.ID,cursor.getInt(cursor.getColumnIndex(NotesDB.ID))); intent.putExtra(NotesDB.CONTENT,cursor.getString(cursor.getColumnIndex(NotesDB.CONTENT))); intent.putExtra(NotesDB.TIME,cursor.getString(cursor.getColumnIndex(NotesDB.TIME))); intent.putExtra(NotesDB.PHOTO,cursor.getString(cursor.getColumnIndex(NotesDB.PHOTO))); intent.putExtra(NotesDB.VIDEO,cursor.getString(cursor.getColumnIndex(NotesDB.VIDEO))); startActivity(intent); } //清空数据库操作 publicvoidclearDatabase(){ dbWriter=notesDB.getWritableDatabase(); dbWriter.delete(NotesDB.TABLE_NAME,null,null); }}importjava.io.File;importjava.sql.Date;importjava.text.SimpleDateFormat;importandroid.annotation.SuppressLint;importandroid.app.Activity;importandroid.content.ContentValues;importandroid.content.Intent;importandroid.database.sqlite.SQLiteDatabase;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;import.Uri;importandroid.os.Bundle;importandroid.os.Environment;importvider.MediaStore;importandroid.util.Log;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.ImageView;importandroid.widget.VideoView;@SuppressLint("SimpleDateFormat")publicclassAddContentextendsActivityimplementsOnClickListener{ privateStringval; privateButtonbtn_save,btn_giveup; privateImageViewimg_photo; privateVideoViewv_video; privateEditTextedit_content; privateFilephoto_file; privateFilevideo_file; privateNotesDBnotesDB; privateSQLiteDatabasedbWriter; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_content); val=getIntent().getStringExtra("flag"); btn_save=(Button)findViewById(R.id.button_save); btn_giveup=(Button)findViewById(R.id.button_giveup); img_photo=(ImageView)findViewById(R.id.img_photo); v_video=(VideoView)findViewById(R.id.v_video); edit_content=(EditText)findViewById(R.id.edit_content); btn_save.setOnClickListener(this); btn_giveup.setOnClickListener(this); v_video.setOnClickListener(this); notesDB=newNotesDB(this); dbWriter=notesDB.getWritableDatabase(); initView(); } @Override publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.button_save: addDB(); finish(); break; caseR.id.button_giveup: finish(); break; caseR.id.v_video: v_video.start(); break; } } publicvoidaddDB(){ ContentValuescontentValues=newContentValues(); contentValues.put(NotesDB.CONTENT,edit_content.getText().toString()); contentValues.put(NotesDB.TIME,getTime()); if(img_photo.getVisibility()==View.GONE) contentValues.put(NotesDB.PHOTO,"null"); else contentValues.put(NotesDB.PHOTO,photo_file+""); if(v_video.getVisibility()==View.GONE) contentValues.put(NotesDB.VIDEO,"null"); else contentValues.put(NotesDB.VIDEO,video_file+""); dbWriter.insert(NotesDB.TABLE_NAME,null,contentValues); } privateStringgetTime(){ SimpleDateFormatformat=newSimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); java.util.Datedate=newjava.util.Date(); Stringstring=format.format(date); returnstring; } privateStringgetDocumentName(){ SimpleDateFormatformat=newSimpleDateFormat("yyyy-mm-dd_HHmmss"); java.util.Datedate=newjava.util.Date(); Stringstring=format.format(date); returnstring; } publicvoidinitView(){ switch(val){ case"1"://文字 img_photo.setVisibility(View.GONE); v_video.setVisibility(View.GONE); break; case"2"://图片+文字 img_photo.setVisibility(View.VISIBLE); v_video.setVisibility(View.GONE); Intentcamera=newIntent( MediaStore.ACTION_IMAGE_CAPTURE);//开启系统相机 photo_file=newFile(Environment.getExternalStorageDirectory() .getAbsoluteFile()+"/"+getDocumentName()+".jpg");//保存照片,只在数据库中存储地址 camera.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photo_file)); startActivityForResult(camera,1); break; case"3"://视频+文字 img_photo.setVisibility(Vie
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 眉山彭山产业新城110kV输变电工程水土保持方案报告表
- 高一历史学案(中外历史纲要上)第10课 辽夏金元的统治
- 空置房管理巡查制度
- 研究生培养质量评估制度
- 2025年AI辅助的供应链并购尽职调查分析
- 杭州银行2026届春季校园招聘备考题库及完整答案详解1套
- 2026华润电力云南公司招聘备考题库含答案详解(突破训练)
- 2026华润知识产权公司总经理及科创服务部总经理招聘备考题库含答案详解(能力提升)
- 2026重庆市纪委监委驻重庆银行纪检监察组遴选3人备考题库附答案详解(a卷)
- 2026广东中山南头镇北帝社区招聘合同制工作人员1人备考题库附完整答案详解(名校卷)
- 2026年安徽省高职单招职业适应性测试考试题库带答案详解
- 2026年食品安全与环境管理的关系
- 统编版二年级下册读书吧必读书《绿野仙踪》导读、阅读检测【含答案】
- 湖北中医药大学-医学-护理105400专业考研复习题库大全-上(500题)
- 种子类中药课件
- (完整word)a3标准规范试卷模板
- 说明书hid500系列变频调速器使用说明书s1.1(1)
- 软体家具、沙发质量检验及工艺
- 建设项目工程造价管理办法
- 测量管理体系标准宣贯ppt课件
- 前期手续横道图
评论
0/150
提交评论