基于Android系统的电子书阅读器的设计与实现

更新时间:2023-04-27 04:14:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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 in teger primary key

bpath varchar (255) not n ull

表4-1书籍数据表

Bookmark表(管理书签,如表4-2):

字段名称数据类型条件约束

Bmid In teger primary key

Bpath varchar(50) not n ull

Bmn ame varchar(50) not n ull

bmoffset In teger not n ull

msavetime varchar(20) not n ull

表4-2书签数据表

User表(用户数据,如表4-3):

字段名称数据类型条件约束

Userid In teger primary key

user name varchar(50) not n ull

password varchar(50) not n ull

teleph one varchar(20) not n ull

表4-3用户数据表

Nearlyread 表(最近阅读,如表4-4):

字段名称数据类型条件约束

Bookid In teger primary key

book name varchar(50) not n ull

bookreadtime varchar(20) not n ull

表4-4最近阅读数据表

Down表(下载,如表4-

??

5)

字段名称数据类型条件约束

Dow nid In teger primary key

varchar(50) varchar(20) 表4-5下载数据表

Downu

ser dow

ntime not n ull not n ull

541 获取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) {N

mPageWidge.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()) return

pagefactory .onDraw( mNextPageCanva)s;

} else {

try { pagefactory .nextPage();

} catch (IOException e1)

{ e1.printStackTrace();

}

if ( pagefactory .islastPage()) return

pagefactory .onDraw( mNextPageCanva)s;

}

mPageWidge.tsetBitmaps( mCurPageBitmap, mNextPageBitmap);

}

ret = mPageWidge.tdoTouchEvent(e); return ret;

}

return false ;

}

});false ; false ;

本文来源:https://www.bwwdw.com/article/55rq.html

Top