4.3.2 建表语句1)创建:1、创建书的表:create table IF NOT EXISTS book(bid integer primary key autoincrement,bpath varchar(255) not null);2、创建书签的表:create table IF NOT EXISTS bookmark(bmid integer primary key autoincrement, bpath varchar(50) not null,bmname varchar(50) not null,bmoffset integer not null,bmsavetime varchar(20) not null);3、创建用户管理的表:create table IF NOT EXISTS user(userid integer primary key autoincrement, username varchar(20) not null,password varchar(20) not null, telephone varchar(20) not null);4、创建最近阅读的表create table IF NOT EXISTS nearlyread(bookid integer primary key autoincrement, bookname varchar(50) not null,bookreadtime varchar(20) not null); 5、创建下载管理的表create table IF NOT EXISTS down(downid integer primary key autoincrement, downuser varchar(20) not null,downbook varchar(20) not null, downtime varchar(20) not null);2)SQlite3数据库使用方法:选择:select from bookmark where bmid=1;插入:insert (bookmark,null,values);删除:delete from bookmark where bmid=3 ;查找:query(table, columns, selection, selectionArgs, groupBy, having, orderBy) 4.3.3 数据表分析本数据库用的是一个轻量级嵌入型数据库sqlite3 ,即创建了一个数据库reader.db,在数据库中创建了几张数据表。
在建设网站系统或者软件之前,我们必须对系统所用到的数据进行大致的分类和具体的结构设计,既要做到清晰明了,又要能适应系统各项功能的调用,而不至于产生结构上的逻辑混乱,保证关键数据在意外情况下不会被破坏,可以说数Book表(用来存放书籍,如表4-1):字段名称数据类型条件约束bid integer primary keybpath varchar(255)not null表4-1 书籍数据表Bookmark表(管理书签,如表4-2):字段名称数据类型条件约束Bmid Integer primary keyBpath varchar(50)not nullBmname varchar(50)not nullbmoffset Integer not nullmsavetime varchar(20)not null表4-2 书签数据表User表(用户数据,如表4-3):字段名称数据类型条件约束Userid Integer primary keyusername varchar(50)not nullpassword varchar(50)not nulltelephone varchar(20)not null表4-3 用户数据表Nearlyread表(最近阅读,如表4-4):字段名称数据类型条件约束Bookid Integer primary keybookname varchar(50)not nullbookreadtime varchar(20)not null表4-4 最近阅读数据表Down表(下载,如表4-5)::字段名称数据类型条件约束Downid Integer primary keyDownuser varchar(50)not null downtime varchar(20)not null表4-5 下载数据表5.4.1 获取sd卡上的txt文本由于一个Android模拟器或者是一个手机客户终端上只会配置一个sdcard,所以一步移动设备上有各种各样的应用App,而且各种App都可能会由数据或者文件存储到移动设备的sdcard上,故而有各式各样的文件类型是该款软件不需要的。
也是用户选择本款软件时所不需要的信息文件,于是通过构造一个过滤式的方法让软件只接受来自sdcard上的TXT格式的文本文件。
该方法是先通过判断是否存储路径是sdcard,通过getRecordFiles()方法过滤掉其他无用文件,将剩余的TXT文件放置集合AirrayList中,然后通过Android的空间Listview将其目录结构文件给显示出来。
代码如下:private void getRecordFiles() {recordFiles= new ArrayList<String>();if (isSdcard) {File files[] = txtDir.listFiles();if (files != null) {for (int i = 0; i < files.length; i++) {if (files[i].getName().indexOf(".") >= 0) {/* 只取.txt文件*/String file =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()的部分代码实现:public void delFile(String filePathAndName) {try {String filePath ="/sdcard/"+filePathAndName;filePath = filePath.toString();java.io.File myDelFile = new java.io.File(filePath);myDelFile.delete();}catch (Exception e) {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(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent e) {boolean ret=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 (IOException e1) {e1.printStackTrace();}if(pagefactory.isfirstPage())return false;pagefactory.onDraw(mNextPageCanvas);} else {try {pagefactory.nextPage();} catch (IOException e1) {e1.printStackTrace();}if(pagefactory.islastPage()) return false;pagefactory.onDraw(mNextPageCanvas);}mPageWidget.setBitmaps(mCurPageBitmap, mNextPageBitmap);}ret = mPageWidget.doTouchEvent(e);return ret;}return false;}});}图5-2 随机流打开文件流程图5.4.4 menu按钮功能的实现添加书签功能——作为一款电子书阅读器软件,这个功能是个轻松快捷而且不可避免的功能,它能够将长篇的文本文件断点记录。