李志伟
(苏州高等职业技术学校,江苏 苏州 215000)
在日常学习和工作中,人们经常需要快速、高效地记录许多信息。然而,传统的记录方式已经不能满足这种需求。研究和开发一种具有文字记录、拾音功能、文件分享等功能的电子记事本,显得十分有意义[1]。2020年,叶从玲[2]使用了Android自带的SQlite数据库,提高了记事本开发的效率。2021年,王杰等[3]使用Eclipse开发工具实现了一种云记事本设计,具有随时记录、读取的特点。2022年,连壮[4]使用Java语言实现了记事本启动界面的动画设计,用户体验性较好。多数记事本实现了增、删、改、查,以及信息检索等基本功能。缺少用户身份验证的记事本,存在一定的安全隐患。本文使用Eclipse开发工具和Android的SDK,开发了具有注册、登录功能的多功能记事本。合法用户可实现编辑记事、查找、分享等操作;能有效防止非法用户查看记录的信息,具有联网、丢失找回、编辑快捷等特点。
需要实现的功能主要有:(1)用户的注册和登录;(2)文本记事基本的操作,如增、删、改、查;(3)共享功能,将记录的信息以短信或微信、QQ、邮件的方式共享给联系人。
设计开发时应当考到以下内容:(1)记事便签加载时,应减少内存消耗,注意内存的释放;(2)加载音频和视频文件时,除了保证播放的流畅,还应保证音质、编辑的质量问题;(3)从技术可行性上分析,软件的配置环境应当满足开发者需求,所开发的应用能让大众所接受。另外,记事本的设计应遵循简单、使用方便的原则,设计不需要太复杂。
数据库表的设计主要有两个,用于文本记事的表和关于用户的表,如表1—2所示。
表1 文本记事表
多功能记事本除了具有图标设计的Logo外,还包括了主界面、文本记事、便签记事、编辑记事、网络分享、记事模块弹窗等模块的设计。
主界面中的文本记事页面,包含了3个部分:第一部分是最上面一行的“标题栏”,右边有两个按钮,分别有两个不同功能。“+”所代表的是添加记事功能模块,点击之后可以任意添加一种记事。点击“搜索”按钮,可将当前Activity跳转到搜索界面,输入关键字则可查找出所有标题带关键字的记事,并且能查看记事内容。第二部分的“模块向导”栏,点击即可跳转到相应模块界面。考虑到操作的简捷性,设计了可左右滑动,实现界面切换的功能,向左滑动屏幕则可跳转到上一个Activity,即上一个模块,向右滑动则跳转到下一个模块界面。在布局代码中,实现的关键组件为ViewPager,用它可以实现界面导航和屏幕切换。
保持记事页面的“标题栏”和“模块向导”不变,增添需要展示的文本记事内容。操作时,可通过单击或双击每一项内容来实现。例如,可实现编辑、修改、保存、查看、删除等功能。设计时,为了使界面更加柔和,可通过将界面整体下拉或滚动,选择将展示内容的滚动条隐藏的方式。记事模块保持了界面的统一风格,更贴近Android软件的UI设计。“展示内容”部分的核心代码,主要是通过重写Android提供的Adapter适配器类中的 getView()方法来实现,主要功能就是将数据转换为视图,以便在UI布局中显示。
此部分的“标题栏”和“模块向导”布局与文本记事模块中的设计一样。但是当用户所添加的便签记事内容过多,需要对这些便签进行管理、分类时,便签记事模块的功能优势就显现出来了。点击功能按钮,可以看到用户的所有便签记事。设计时需注意,若设计的便签过大,内存消耗过多,会导致此模块功能崩溃,程序无法正常运行。比如使用了setImageBitmap()方法或setImageResource()来设置一张大图,在完成decode后,最终仍要调用Java层的createBitmap()方法来完成,这样就会消耗掉更多的内存资源。我们可以通过使用Android自带的、已封装好了方法,来解决内存占用过大的问题。比如,使用BitmapFactory.decodeStream()方法,创建出一个Bitmap,再将其设为ImageView的source,加载显示即可。这是因为decodeStream最大的优势是直接调用了nativeDecodeAsset()方法来完成decode,无需再使用Java层的createBitmap。便签记事的分类功能是通过Android提供的GridView控件来实现的。
该模块在设计时,选择系统自带的Media Play类,即可实现对音频、视频的加载、插入、播放等操作。调用线程录制,可减少硬件原因导致的数据丢失问题。将反应慢的原始按钮样式,替代为成现代的、反应灵敏的话筒便签。考虑到安全性问题,需要重写按钮对应的方法来处理这个过程。为了保证编辑的质量,减少软件卡顿,可通过线程来实现。部分核心代码如下:
mydata=new MyDataBase(getContext(),"mydata");//将生成新的编辑文件
dao=new DataBaseDAO(mydata);//实例化数据库连接类
mHandler=new MyHandler();//用线程
dialog_view.setImageResource(res[msg.what]);//根据声音强弱改变便签,从而达到看起来在说话的效果
SetRecorderFile();//创建音频文件
recorder=new MediaRecorder();//实例化Android多媒体类
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置音频格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置解码 先设置前面的属性
分享功能设计的难点在于,关键字高亮的设置问题。通过使用Google官方提供的SpannableString Builder类中的setSpan()方法,来处理高亮问题。该方法对原本的字符串做出处理处理后,亮出关键字,执行Textview.setText(result)方法,达到实现高亮效果。共享功能对数据的处理流程是,首先查询出数据库的所有数据,对于每类数据,保存在list集合中,随后对list集合进行遍历,remove掉所有包含关键字的项,对剩下的数据通过Adapter适配器选择性传到活动界面显示。对于每类数据都做这种处理,即可共享出所有符合条件的数据。部分关键代码如下:
private void filter(){//根据关键字 数据处理函数
if(list.size()>0){//list存储数据库取出来的所有数据
for(int i=0;i
//去除不包含 关键字的数据,words表示关键字内容
if("".equals(words)∣∣mp.get("title").indexOf(words)==-1){list.remove(i);i--;}}}
if(list!=null&&list.size()>0){ option.setvisible(true);}//如果最后有数据,则将相应模块设为可见状态
else{ option.setvisible(false);}}//如果没有数据,则相应模块设置为不可见状态
长按每一项功能模块,都会弹出相应的操作列表。这些弹出框就是所有记事弹框的功能。目前,弹框消失是通过用户点击返回键或者取消键,或者在弹出框之外的任意处点击后,才会消失,不够简便。为了实现操作简便的效果,可将其设定为,只有点击取消按钮才会消失,否则不做任何操作。实现弹框的功能代码,主要是长按操作,触发事件处理机制,调用接口响应。部分核心实现代码如下:
//长按之后弹出列表删除、修改标题、更新内容、共享列表
AlertDialog.Builder builder=new AlertDialog.Builder(mContext);//弹出框
builder.setCancelable(false);//弹出框设为不可取消
option.delete(dates);//调用接口实现删除操作
option.update_note(dates);//调用接口实现更新操作
option.update_context(dates);//调用接口实现更新操作
option.send(dates,title);//调用接口实现共享操作
builder.setNegativeButton(“取消”,new DialogInterface.OnClickListener() {//点击取消按钮,关闭弹出框
public void onClick(DialogInterface dialog,int which){dialog.cancel();//关闭弹出框
任何一款设计软件,在发布、使用前必须进行测试。测试主要是查看软件中数据的准确性,能否满足需求,各功能模块的操作是否正常,以及还有哪些地方需要改进[5]。通常使用白盒测试技术和黑盒测试技术来对软件进行测试。前者是在了解系统内部工作流程的前提下,可以根据需求规范验证系统内部操作是否能够正常运行的测试;而黑盒测试指的是,倘若知道了这个系统的全部功能,可以进行测试、检测系统中的每一个功能是否满足正常使用。一般的测试用例分为输入、行为和希望结果3个部分。但是优秀的测试用例还需要从正确性、完整性、输入具体内容、用词无歧义、用例细化、判断点无歧义,以及合理区分优先级等几个方面考虑。在对多功能记事本应用进行测试时,需考虑到登录的权限进行测试,如用户登录模块测试、新增标签模块测试、删除分类测试以及弹窗模块测试、分享模块测试。对测试中发现的错误及时修改处理,保证系统准确无误地供给用户使用。
本文基于Eclipse+Android SDK开发设计了一款多功能记事本。完成了需求分析与数据库表的设计;实现了多功能记事本的主界面设计、文本记事模块设计、便签记事与编辑记事模块设计,以及网络分享模块的设计;在登录、修改密码以及分类删除功能性测试方面,表明了设计的有效性。此类多功能的记事本具有很强的实用性,快捷、方便的记事特点,更有利于提高信息记录的效率。