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 notnull,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 in teger primary keybpath varchar (255) not n ull表4-1书籍数据表Bookmark表(管理书签,如表4-2):字段名称数据类型条件约束Bmid In teger primary keyBpath varchar(50) not n ullBmn ame varchar(50) not n ullbmoffset In teger not n ullmsavetime varchar(20) not n ull表4-2书签数据表User表(用户数据,如表4-3):字段名称数据类型条件约束Userid In teger primary keyuser name varchar(50) not n ullpassword varchar(50) not n ullteleph one varchar(20) not n ull表4-3用户数据表Nearlyread 表(最近阅读,如表4-4):字段名称数据类型条件约束Bookid In teger primary keybook name varchar(50) not n ullbookreadtime varchar(20) not n ull表4-4最近阅读数据表Down表(下载,如表4-・・5)字段名称数据类型条件约束Dow nid In teger primary keyvarchar(50) varchar(20)表4-5下载数据表Downu ser dow ntimenot n ull not n ull541 获取sd卡上的txt文本由于一个An droid模拟器或者是一个手机客户终端上只会配置一个sdcard , 所以一步移动设备上有各种各样的应用App,而且各种App都可能会由数据或者文件存储到移动设备的sdcard上,故而有各式各样的文件类型是该款软件不需要的。
也是用户选择本款软件时所不需要的信息文件,于是通过构造一个过滤式的方法让软件只接受来自sdcard上的TXT格式的文本文件。
该方法是先通过判断是否存储路径是sdcard,通过getRecordFiles ()方法过滤掉其他无用文件,将剩余的TXT文件放置集合AirrayList 中,然后通过An droid的空间Listview 将其目录结构文件给显示出来。
代码如下:private void getRecordFiles() {recordFiles = n ewArrayListvStri ng>();if ( isSdcard ) {File files[] = txtDir」istFiles();if (files != null ) {for ( int i = 0; i < files. length ; i++) {if (files[i].getName().indexOf( "." ) >= 0) {/*只取.txt文件*/Stri ng file =files[i].getName().substri ng(files[i].getName().i ndexOf( "•"));if (file.toLowerCase().equals( ".txt"))recordFiles .add(files[i].getName());}}}}图5-1文件过滤流程图542长按选项删除户获会在,,sdcard 里面积累十分多的TXT 文 该功能通 可能在漫长的使用软件生活中, 件数量,所以这里提供一个删除功能供用户删除一些很久不用的文件。
过获取到An droid 控件ListView 上每一条Item 的长按事件进行绑定事件监听, card 里面文件的操作权限来对 ()的部分代 通过该行为进行功能描述,通过获取系 对于文于sdcard 里面的TXT 文件进行删除。
下面是删除的方法 delFile码实现:是 public void delFile(String filePathAndName)^try {过滤 Stri ng filePath = "/sdcard/" +filePathA ndName;newjava.io.File(filePath);java.io.File myDelFile =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 工厂封装了一些绘制阅读背景的方法的部分代码实现:mPageWidge.tsetBitmaps( mCurPageBitmap, mNextPageBitmap);mPageWidge.tsetOnTouchListener( newOnTouchListener() { @Override public boolean onTouch(View v, MotionEvent e) {boolean ret= false ;if (v == mPageWidge)t {if (e.getAction() == MotionEvent. ACTION_DOW) {NmPageWidge.tabortAnimation();mPageWidge.tcalcCornerXY(e.getX(), e.getY());pagefactory .onDraw( mCurPageCanva)s;if ( mPageWidge.tDragToRight()) {try {pagefactory .prePage();} catch (IOException e1) { e1.printStackTrace(); }if ( pagefactory .isfirstPage()) returnpagefactory .onDraw( mNextPageCanva)s;} else {try { pagefactory .nextPage();} catch (IOException e1){ e1.printStackTrace();}if ( pagefactory .islastPage()) returnpagefactory .onDraw( mNextPageCanva)s;}mPageWidge.tsetBitmaps( mCurPageBitmap, mNextPageBitmap);}ret = mPageWidge.tdoTouchEvent(e); return ret;}return false ;}});false ; false ;图5-2 [随机流打开文件流程图544 menu 按钮功能的实现添加书签功能一一作为一款电子书阅读器软件,这个功能是个轻松快捷而 且不可避免的功能,它能够将长篇的文本文件断点记录。