基于Android系统的电子书阅读器的设计与实现.docx
- 文档编号:24784716
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:20
- 大小:1.44MB
基于Android系统的电子书阅读器的设计与实现.docx
《基于Android系统的电子书阅读器的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Android系统的电子书阅读器的设计与实现.docx(20页珍藏版)》请在冰豆网上搜索。
基于Android系统的电子书阅读器的设计与实现
4.3.2建表语句
1)创建:
1、创建书的表:
createtableIFNOTEXISTSbook(bidintegerprimarykeyautoincrement,bpathvarchar(255)notnull);
2、创建书签的表:
createtableIFNOTEXISTSbookmark(bmidintegerprimarykeyautoincrement,bpathvarchar(50)notnull,bmnamevarchar(50)notnull,bmoffsetintegernotnull,bmsavetimevarchar(20)notnull);
3、创建用户管理的表:
createtableIFNOTEXISTSuser(useridintegerprimarykeyautoincrement,usernamevarchar(20)notnull,passwordvarchar(20)notnull,telephonevarchar(20)notnull);
4、创建最近阅读的表
createtableIFNOTEXISTSnearlyread(bookidintegerprimarykeyautoincrement,booknamevarchar(50)notnull,bookreadtimevarchar(20)notnull);
5、创建下载管理的表
createtableIFNOTEXISTSdown(downidintegerprimarykeyautoincrement,downuservarchar(20)notnull,downbookvarchar(20)notnull,downtimevarchar(20)notnull);
2)SQlite3数据库使用方法:
选择:
selectfrombookmarkwherebmid=1;
插入:
insert(bookmark,null,values);
删除:
deletefrombookmarkwherebmid=3;
查找:
query(table,columns,selection,selectionArgs,groupBy,having,orderBy)
4.3.3数据表分析
本数据库用的是一个轻量级嵌入型数据库sqlite3,即创建了一个数据库reader.db,在数据库中创建了几张数据表。
在建设网站系统或者软件之前,我们必须对系统所用到的数据进行大致的分类和具体的结构设计,既要做到清晰明了,又要能适应系统各项功能的调用,而不至于产生结构上的逻辑混乱,保证关键数据在意外情况下不会被破坏,可以说数
Book表(用来存放书籍,如表4-1):
字段名称
数据类型
条件约束
bid
integer
primarykey
bpath
varchar(255)
notnull
表4-1书籍数据表
Bookmark表(管理书签,如表4-2):
字段名称
数据类型
条件约束
Bmid
Integer
primarykey
Bpath
varchar(50)
notnull
Bmname
varchar(50)
notnull
bmoffset
Integer
notnull
msavetime
varchar(20)
notnull
表4-2书签数据表
User表(用户数据,如表4-3):
字段名称
数据类型
条件约束
Userid
Integer
primarykey
username
varchar(50)
notnull
password
varchar(50)
notnull
telephone
varchar(20)
notnull
表4-3用户数据表
Nearlyread表(最近阅读,如表4-4):
字段名称
数据类型
条件约束
Bookid
Integer
primarykey
bookname
varchar(50)
notnull
bookreadtime
varchar(20)
notnull
表4-4最近阅读数据表
Down表(下载,如表4-5):
:
字段名称
数据类型
条件约束
Downid
Integer
primarykey
Downuser
varchar(50)
notnull
downtime
varchar(20)
notnull
表4-5下载数据表
5.4.1获取sd卡上的txt文本
由于一个Android模拟器或者是一个手机客户终端上只会配置一个sdcard,所以一步移动设备上有各种各样的应用App,而且各种App都可能会由数据或者文件存储到移动设备的sdcard上,故而有各式各样的文件类型是该款软件不需要的。
也是用户选择本款软件时所不需要的信息文件,于是通过构造一个过滤式的方法让软件只接受来自sdcard上的TXT格式的文本文件。
该方法是先通过判断是否存储路径是sdcard,通过getRecordFiles()方法过滤掉其他无用文件,将剩余的TXT文件放置集合AirrayList中,然后通过Android的空间Listview将其目录结构文件给显示出来。
代码如下:
privatevoidgetRecordFiles(){
recordFiles=newArrayList
if(isSdcard){
Filefiles[]=txtDir.listFiles();
if(files!
=null){
for(inti=0;i if(files[i].getName().indexOf(".")>=0){ /*只取.txt文件*/ Stringfile=files[i].getName().substring(files[i].getName().indexOf(".")); if(file.toLowerCase().equals(".txt")) recordFiles.add(files[i].getName()); } } } } } 图5-1文件过滤流程图 5.4.2长按选项删除 可能在漫长的使用软件生活中,用户会在sdcard里面积累十分多的TXT文件数量,所以这里提供一个删除功能供用户删除一些很久不用的文件。 该功能通过获取到Android控件ListView上每一条Item的长按事件进行绑定事件监听,通过该行为进行功能描述,通过获取系统对于sdcard里面文件的操作权限来对于sdcard里面的TXT文件进行删除。 下面是删除的方法delFile()的部分代码实现: publicvoiddelFile(StringfilePathAndName){ try{ StringfilePath="/sdcard/"+filePathAndName; filePath=filePath.toString(); java.io.FilemyDelFile=newjava.io.File(filePath); myDelFile.delete(); } catch(Exceptione){ Toast.makeText(this,"删除文件操作出错",1000).show(); e.printStackTrace(); } } 5.4.3阅读文本界面的实现 这是该款软件最基本也是最重要的功能——对于TXT文本文件的可视化读取。 由于软件中对于sdcard里面的文件的读取可以是从各种各样的界面上获取要读取的TXT文件资源,比如可以从本地管理列表直接读取,也可以从最近阅读列表读取,或者是从阅读界面来读取该文本的书签从而读取文本文件的某一段。 所以,通过Android的Intent(意图方式)传递数据,数据包括了实现本界面的Activity类名,也包括了要阅读文本的书名,还有就是要读取文件的开始页码比例。 如果是非进度跳转功能,或者是书签的功能则默认进度读取开始页码也第一页。 而这些数据则通过封装到某个对象中,用bundle传递给Intent,再通过Intent转发数据。 以下便是通过BitmapFactory工厂封装了一些绘制阅读背景的方法的部分代码实现: mPageWidget.setBitmaps(mCurPageBitmap,mNextPageBitmap); mPageWidget.setOnTouchListener(newOnTouchListener(){ @Override publicbooleanonTouch(Viewv,MotionEvente){ booleanret=false; if(v==mPageWidget){ if(e.getAction()==MotionEvent.ACTION_DOWN){ mPageWidget.abortAnimation(); mPageWidget.calcCornerXY(e.getX(),e.getY()); pagefactory.onDraw(mCurPageCanvas); if(mPageWidget.DragToRight()){ try{ pagefactory.prePage(); }catch(IOExceptione1){ e1.printStackTrace(); } if(pagefactory.isfirstPage())returnfalse; pagefactory.onDraw(mNextPageCanvas); }else{ try{ pagefactory.nextPage(); }catch(IOExceptione1){ e1.printStackTrace(); } if(pagefactory.islastPage())returnfalse; pagefactory.onDraw(mNextPageCanvas); } mPageWidget.setBitmaps(mCurPageBitmap,mNextPageBitmap); } ret=mPageWidget.doTouchEvent(e); returnret; } returnfalse; } }); } 图5-2随机流打开文件流程图 5.4.4menu按钮功能的实现 添加书签功能——作为一款电子书阅读器软件,这个功能是个轻松快捷而且不可避免的功能,它能够将长篇的文本文件断点记录。 如果用户在长时间的阅读过程中感觉到疲乏,但是文件依然没法短时间内看完,为了方便下次阅读则将当前页面记录,下次则可以直接点击进入需要的页面阅读。 该功能通过记录了文件的总字节长度及当前的阅读长度进行百分比计算。 当前页面的字节则是通过之前已经计算好了的字体大小,每页会大概的存放多少字节数。 privatevoidsaveBookMarkDialog(){ finalDialogd=newDialog(turntest.this); d.setTitle("添加书签"); d.setContentView(R.layout.bookmark_dialog); finalEditTextet=(EditText)d.findViewById(R.id.bmet); finalButtonsure=(Button)d.findViewById(R.id.bmsure); finalButtoncancel=(Button)d.findViewById(R.id.bmcancel); //确定动作 sure.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewv){ Stringbmn=et.getText().toString(); if(bmn.length()<1){ d.dismiss(); d.show(); }else{ if(bmn.length()>10){ bmn.substring(0,10); } BookMarkbm=newBookMark(); bm.setBookPath(txtname); bm.setMarkName(bmn); bm.setCurrentOffset(pagefactory.m_mbBufEnd); bm.setSaveTime(DateUtil.dateToString(newDate())); mHelper=newCRDBHelper(getApplicationContext()); operateResult=mHelper.addBookMark(bm); mHelper.close(); if(operateResult){ Toast.makeText(turntest.this,"添加成功",1000).show(); }else{ Toast.makeText(turntest.this,"添加失败",1000).show(); } d.dismiss(); } } }); 以下是查找书签及实现跳转的部分代码实现: list=newArrayList for(inti=0;i Stringmark=mBookMarkList.get(i).getMarkName()+""+mBookMarkList.get(i).getSaveTime(); list.add(mark); } list_tag=(ListView)findViewById(R.id.list_tag); adapter=newArrayAdapter(ShowBookmark.this, list_tag.setAdapter(adapter); //短按跳到书签 list_tag.setOnItemClickListener(newOnItemClickListener(){ @Override publicvoidonItemClick(AdapterView >arg0,Viewarg1,intarg2, longarg3){ //获取到所点击的书签的定位 intOffset=mBookMarkList.get(arg2).getCurrentOffset(); IntentmIntent=newIntent(ShowBookmark.this,turntest.class); BundlemB=newBundle(); mB.putString("Activity","ShowBookmarkActivity"); mB.putInt("Offset",Offset); mIntent.putExtras(mB); startActivity(mIntent); finish(); } }); 删除书签: 该功能就是简单的运用对于书签的SQLite数据库操作,通过对于ListView组件的长按事件添加监听,程序自动生成对话框。 以下是部分代码实现: list_tag.setOnItemLongClickListener(newOnItemLongClickListener(){ @Override publicbooleanonItemLongClick(AdapterView >arg0,Viewarg1, intarg2,longarg3){ finalintpos=arg2; newAlertDialog.Builder(ShowBookmark.this).setTitle("提示") .setMessage("删除该书签") .setPositiveButton("确定",newOnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ booleanb=mHelper.deleteBookMark(mBookMarkList.get(pos).getBookMarkId()); if(b&&mBookMarkList.size()>0){ list.remove(pos); adapter.notifyDataSetChanged(); } } }).setNegativeButton("取消",newOnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ dialog.dismiss(); } }).show(); returnfalse; } }); //退出 6.1功能界面 打开软件,会从Logo界面自动跳转到该功能界面,该功能的实现只是简单的通过Android系统的界面设计,通过对其TabHost选项卡组件的运用将界面纵向平行的设计为三个覆盖的界面,点击则切换成指定的选项界面,如图5-1: 图5-1功能界面 6.2书籍选择主界面 打开软件,软件就自动加载sd卡上的txt文档,该列表通过获取Android系统的Sdcard的路径然后获取到里面的所有文件,然后通过文件名后缀来判别是否为.TXT结尾的文件将其添加进入数据库,然后通过数据库查询列出所有该书籍表里面的集合从而列出要选择的文档,如图5-2: 图5-2书籍选择界面 6.3用户阅读界面 用户左键单击要阅读的电子书籍,进入由Android的画笔类,通过调用BitmapFactory工厂方法onDraw绘制动态页面效果,画面产生获取页面坐标事件,根据坐标来判断是向前翻页还是向后翻页,如图5-3是向后翻页: 图5-3用户阅读界面 6.4菜单 点击menu按钮,就回出现选择界面,增加书签、查看书签、退出阅读。 如图5-4: 图5-4Menu菜单功能 6.5书签操作 点击添加书签,会出现一个添加书签的界面,如图5-5 图5-5添加书签 点击查看标签就会出现相应文档的标签列表,如图5-6 图5-6书签列表 长按某个选项就会删除标签。 如图5-6 图5-7删除书签 如果取消则返回标签界面,如果确定则删除书签。 6.6书籍操作 删除文档界面,从5-1图中删除xyy2.txt长按菜单键,该功能是对于Android组件ListView的长按事件的添加监听功能,如图5-8: 图5-8删除书籍 6.7最近阅读 在阅读过得书籍会添加进最近阅读数据库,方便用户后期直接点击进入阅读,如图5-9: 图5-9最近阅读列表 6.8用户登录 通过与服务器的连接获取服务器提供了最新最热的书籍推荐,先登陆可以记录该用户的下载记录。 如图: 图5-10在线登陆界面 6.9在线中心 图5-11服务器获取的最新资源 6.10性能分析 6.10.1概述及方案特点 本软件是利用java语言在android平台上实现的一款阅读软件,使用起来方便,非常容易使用,也方便用户的操作,最重要的特点就是实现简单,没有过于复杂冗余的操作。 数据库是使用sqlite3来进行存数。 方案特点: (1)系统先进性 本系统的先进性主要体现在能触屏翻页,能显示已经阅读的进度,大大减少了占用用户的时间,而且阅读起来比较方便快捷。 (2)系统可扩展性 由于本系统是基于android系统手机开发的软件,用java语言实现,无论是可读性,可维护性,还是可扩展性,都是比较优越的。 (3)智能性 增加列表显示功能,以便实现信息传递的快速性、智能性 (4)可维护性 安装简单、维护方便。 人性化的用户界面,操作简单、易用 6.10.2性能 本系统响应时间、更新处理时间、数据的转换和传送时间取决于硬件的性能,不过一般情况下是用户的允许等待时间。 其设置的是触屏自动翻页,就像我们翻阅书籍的时候一页一页的反动,更符合人们的思想逻辑,比一行一行的翻阅更为灵活。 服务器连接则通过HTTP协议,采用多线程下载机制快速获取资源。 参考文献 [1]张白一,崔尚森《面向对象程序设计》(java第二版)[M]西安电子科技大学出版,2006.01 [2]张孝祥《Java就业培训教程》[M]清华大学出版社2007.07.01 [3]李兴华《Java开发实战经典》[M]清华大学出版社2009.08.01 [4]李钟尉,周小彤《Java从入门到精通》(第二版)[M]清华大学出版社2010.07 [5]孙鑫《JavaWeb开发详解》[M]电子工业出版社2006.04.01 [6]阎宏《Java与模式》[M]电子工业出版社2002.10.01 [7]韦斯,冯舜玺《数据结构与算法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Android 系统 电子书 阅读器 设计 实现