<strong>1.1   功能需求及技术可行性分析</strong>

1.   成语分类学习:用户可以根据自己喜欢的分类(动物类、人物类、季节类、自然类、数字类、寓言类、其他类)来进行选择学习。

2.   乐猜成语:学习之余玩玩猜成语游戏,寓教于乐。

3.   成语收藏:当用户遇到自己想要保存的成语,点击保存按钮,即保存到收藏页面以方便用户再次查看,对已经掌握的成语,用户可以从收藏夹中删除。

4.    成语查询:支持首字母查询,如一心一意可输入:yxyy。

1.2      创建数据库和表

创建happyidiom项目,包名叫做cn.edu.bztc.happydiom,使用的是4.4的API,这里我们需要在cn.edu.bztc.happydiom包下再新建几个包,如下图所示:

其中activity包用于存放所有活动相关的代码,db包用于存放所有数据库相关的代码,entity包用于存放所有实体相关的代码,dao包用于存放数据库操作相关的代码,util

包用于存放所有实体相关的代码。

首先第一阶段我们要做的就是创建好数据库和表,这样从服务器获取到的数据才能够存储到本地。使用Navicat Premium 可视化界面来创建数据库,下载成功安装后,选择文件菜单->新建->SQLite,在弹出的对话框中输入连接名,选择类型为SQLite3,选择数据库文件存放的位置,如下图所示:

数据库创建完了,如何导入已有的数据库呢?我们平时见到的android数据库操作一般都是在程序开始时创建一个空的数据库,然后再进行相关操作。我们知道android的数据库存放在/data/data/package name/目录下,所以我们需要做的是把已有的数据库传入那个目录下。思路是用FileInputStream读取原数据库,再用FileOutputStream把读取到的东西写入到那个目录。这样就可以方便的操作数据库了.首先在res目录下新建raw目录,将idioms.db数据库复制到此目录下。这是因为raw目录的东西,android会原封不动的拷贝到程序中,而不会转换为二进制文件.在db包下新建一个DBOpenHelper类,代码如下所示:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import com.bzu.qilu.R;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;
/**数据库管理类* */public class DBOpenHelper {private final int BUFFER_SIZE = 400000;//缓冲区大小public static final String DB_NAME="idioms.db";//保存的数据库文件名public static final String PACKAGE_NAME="com.bzu.qilu";//应用包名public static final String DB_PATH="/data"+ Environment.getDataDirectory().getAbsolutePath()+"/"+ PACKAGE_NAME+"/databases";//在手机里存放数据库的位置private Context context;public DBOpenHelper(Context context){this.context=context;}//打开数据库public SQLiteDatabase openDatabase(){try{File myDataPathFile = new File(DB_PATH);//if(!myDataPathFile.exists()){myDataPathFile.mkdir();//如果没有这个目录则创建}String dbfile = myDataPathFile+"/"+DB_NAME;if(!(new File(dbfile).exists())){//判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库InputStream is = context.getResources().openRawResource(R.raw.idioms);FileOutputStream fos = new FileOutputStream(dbfile);byte[] buffer = new byte[BUFFER_SIZE];int count = 0;while((count =is.read(buffer))>0){fos.write(buffer,0,count);}fos.close();is.close();}SQLiteDatabase db =SQLiteDatabase .openOrCreateDatabase(dbfile, null);return db;}catch(FileNotFoundException e){Log.e("Database", "File not found");e.printStackTrace();}catch(IOException e){Log.e("Database", "IO exception");e.printStackTrace();}return null;}
}

编写测试程序:

首先修改AndroidMainifest.xml文件搭建起单元测试的环境。修改后的文件如下所示:

<uses-library android:name="android.test.runner" />
<instrumentationandroid:name="android.test.InstrumentationTestRunner"android:targetPackage="cn.edu.bztc.happyidion.activity" >
</instrumentation>

接下来在test包下,新建DBOpenHelperTest继承AndroidTestCase.代码如下:

public class DBOpenHelperTest extends AndroidTestCase {public void testDBCopy(){DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());dbOpenHelper.openDatabase();}
}

会出现下面界面:

然后我们在这个FileExplorer目录下找到数据库存放的位置

另外,Animal 还存在一个对应的实体类,在entity包下新建一个Animal类,代码如下所示:

package cn.edu.bztc.happyidiom.entity;public class Animal {private int id;private String name;//成语名称private String pronounce;//成语发音private String explain;//成语解释private String antonym;//反义词private String homoionym;//同义词private String derivation;//源自private String examples;//例子public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPronounce() {return pronounce;}public void setPronounce(String pronounce) {this.pronounce = pronounce;}public String getExplain() {return explain;}public void setExplain(String explain) {this.explain = explain;}public String getAntonym() {return antonym;}public void setAntonym(String antonym) {this.antonym = antonym;}public String getHomoionym() {return homoionym;}public void setHomoionym(String homoionym) {this.homoionym = homoionym;}public String getDerivation() {return derivation;}public void setDerivation(String derivation) {this.derivation = derivation;}public String getExamples() {return examples;}public void setExamples(String examples) {this.examples = examples;}}
接着我们还需要创建一个AnimalDao类,这个类会把一些常用的数据库封装起来,代码如下所示:
package cn.edu.bztc.happyidiom.dao;import java.util.ArrayList;
import java.util.List;import cn.edu.bztc.happyidiom.db.DBOpenHelper;
import cn.edu.bztc.happyidiom.entity.Animal;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;public class AnimalDao {private static AnimalDao animaiDao;private SQLiteDatabase db;/*将构造方法私有化*/private AnimalDao(Context context){DBOpenHelper dbHelper=new DBOpenHelper(context);db=dbHelper.openDatabase();}/*获取AnimalDao的实例*/public synchronized static AnimalDao getInstance(Context context){if(animaiDao==null){animaiDao=new AnimalDao(context);}return animaiDao;}/*从数据库读取所有的动物类成语*/public List<Animal> getAllAnimals(){List<Animal> list=new ArrayList<Animal>();Cursor cursor=db.query("animal",null,null,null,null,null,null);if(cursor.moveToNext()){do{Animal animal=new Animal();animal.setId(cursor.getInt(cursor.getColumnIndex("_id")));animal.setName(cursor.getString(cursor.getColumnIndex("name")));animal.setPronounce(cursor.getString(cursor.getColumnIndex("pronounce")));animal.setAntonym(cursor.getString(cursor.getColumnIndex("antonym")));animal.setHomoionym(cursor.getString(cursor.getColumnIndex("homoionym")));animal.setDerivation(cursor.getString(cursor.getColumnIndex("derivation")));animal.setExamples(cursor.getString(cursor.getColumnIndex("examples")));animal.setExplain(cursor.getString(cursor.getColumnIndex("explain")));list.add(animal);}while(cursor.moveToNext());}return list;}
}

AnimalDao是一个单例类,我们将它的构造方法私有化,并提供了一

getInstance()方法来获取AnimalDao的实例,这样我们就可以保证全局范围内只会有一个AnimalDao的实例。接下来我们在AnimalDao中提供了一个方法getAllAnimals()该方法用来获取所有的动物类成语。

编写单元测试类AnimalDaoTest继承AnroidTestCase,代码如下:

package cn.edu.bztc.happyidiom.test;import java.util.List;import cn.edu.bztc.happyidiom.dao.AnimalDao;
import cn.edu.bztc.happyidiom.entity.Animal;
import android.test.AndroidTestCase;public class AnimalDaoTest extends AndroidTestCase{public void testGetAllAnimals(){AnimalDao animalDao=AnimalDao.getInstance(getContext());List<Animal> animals=animalDao.getAllAnimals();System.out.println(animals.size());for(Animal animal:animals){System.out.println(animal.getName());}}
}

运行单元测试,结果如下图所示:

Android之乐学成语相关推荐

  1. 个人完成案例之乐学成语(显示所有动物类成语的列表和每条成语的详细信息)

    上篇完成了显示学习列表和连接主界面,现在我们来完成所有动物类成语的列表和每条成语的详细信息. 首先,显示所有的动物类列表. 在layout下新建一个activity_animal.xml文件,主要添加 ...

  2. 乐学成语实现之一:创建数据库和表

    <span style="font-size:32px;"> 首先在eclipse中新建一个Android项目,项目名叫做HappyIdiom,包名叫做cn.edu.b ...

  3. Android小程序-乐学成语游戏(四)

    目标效果:      游戏页面有几个小游戏,因为时间原因只做了第一个猜成语,是用的选择题方式,十道题以内答对六题算闯关成功. 1.新建GameActivity.java页面和activity_game ...

  4. 乐学成语——android(一)

    首先我们先创建如下几个包 其中activity包中用于存放所有活动相关的代码,db包中用于存放所有数据库相关的文件的代码,entity包用于存放所有实体相关的代码,dao包中用于存放数据操作相关的代码 ...

  5. Android小程序-乐学成语背景音乐(五)

    目标效果: 第五个帮助页面改为设置页面,添加switch控件,播放背景音乐. 1.创建SetActivity.java页面和activity_set.xml页面,activity_set.xml页面放 ...

  6. Android SQLite之乐学成语项目数据库存储

    一.SQLite是什么?为什么要用SQLite?SQLite有什么特点?(下面小编一 一解答) ①SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持 标 ...

  7. 乐学成语——数据库创建(导入、打开)

    1.创建数据库 通过Navicat Premium软件新建一个SQLite文件idioms.db,建表animal信息为 id                    int               ...

  8. 乐学成语(HappyIdiom)

    一.创建数据库和表 1.创建好数据库和表(数据库名字为:idioms) 2.首先创建一个Android项目,项目名字为HappyIdiom,包名为cn.edu.bztc.happyidiom,然后在此 ...

  9. 乐学成语——第一部分

     1. 先做好基础工作把数据库导入到项目工程中,这是第一步.    (1)我们知道android的数据库存放在/data/data/package name/目录下,所以我们需要做的是把已有的数据库传 ...

最新文章

  1. python3 turtle_最新版Python 3.8.6 版本发布,跨界程序员零压力学Python之道!(附下载)...
  2. 视频聊天创企Tribe获300万美元种子轮融资
  3. 周志华“西瓜书”啃不动?来试试这个!详细公式推导,上万好评
  4. 黑马程序员--网络编程
  5. QgridLayout例子,在qlayout添加button实例(添加窗体过程类似)
  6. 前端学习(1800):前端调试之清除浮动练习2
  7. Mysql sql语句积累
  8. (王道408考研数据结构)第五章树-第三节3:线索二叉树
  9. 南加大计算机硕士学制,2020年南加州大学硕士读几年
  10. 基于OpenGL的贪吃蛇游戏设计与实现
  11. 算法64-荷兰国旗问题
  12. R 语言数据处理入门-2(缺失值处理)
  13. 英语语法之后缀决定词性
  14. 迈开职场充电第一步,让我们在这个冬天邂逅社科院杜兰金融管理硕士项目
  15. socket.io实现多人聊天
  16. 第一次去曼谷旅游怎么玩?这份省钱攻略请收好
  17. 【文献调研】SLAM方向综述性论文
  18. 自己捣鼓的小程序实现订单代付的功能
  19. 2022-04-清华管理学-清华大学-宁向东
  20. Ubuntu系统安装时grub修复操作

热门文章

  1. tensorflow 使用 TFRecord 读取图片(二)
  2. 学习周志(8.21)
  3. Java_io体系之PipedWriter、PipedReader简介、走进源码及示例——14
  4. Win7 IE浏览器不见了的解决方法--win10专业版
  5. Ubuntu 安装MySQL,修改root密码
  6. pyinstaller多文件打包exe
  7. 惠普战99锐龙版 评测
  8. JavaScript中,返回上一个页面时,如何保证上一个页面的不刷新?
  9. svg动态赋值并让其闪烁
  10. 小猿学python_小猿圈python学习之编程语言排名