乐学成语
综合项目之乐学成语是一个成语学习软件,它具有四个主要的功能点:1.成语分类学习:用户可以根据自己喜欢的分类(动物类、人物类、季节类、自然类、数字类、寓言类、其它类)来进行选择学习。2.乐猜成语:学习之余玩玩猜成语游戏,寓教于乐。3.用户遇到想保存的成语,点击保存按钮,即保存到收藏页面,同时用户也可以从收藏夹中删除。4.成语查询:支持首字母查询。
想要实现这些功能需要用到UI、网络、数据存储等技术,分析完这些,现在开始我们的成语之旅。
首先我们给这个软件起一个名字HappyIdiom,然后在Eclise中新建一个Android项目,项目名叫做HappyIdiom,包名为cn.edu.bztc.happyidiom。在com.edu.bztc.happy
idiom包下新建几个包
其中activity包用于存放所有活动相关的代码,db包用于存放所有数据库相关的代码,entity包用于存放所有的实体相关的代码,dao包用于存放数据操作相关的代码,util包用于存放所有工具相关的代码。ADT帮我们自动生成的MainA
ctivity和activity_main.xml文件删除不用了。
二.创建数据库
使用Navicat Premium可视化界面来创建数据库,建立一个idioms.db数据库并建立一个Animal动物表,表中存放的是所有动物类的成语。
并选择导出SQL语句
三.Android的数据库存放在data/data/package name/目录下。我们需要把已有的数据库传到那个目录下。首先在res目录下建立raw目录,将idioms.db数据库复制到此目录下。
四.在db包下新建一个DBOpenHelper类,代码如下所示:
<span style="font-size:10px;">/**
* 实现将数据库文件从raw目录拷贝到手机里存放数据库的位置
*
* @author 源
*/
public class DBOpenHelper {
private final int BUFFER_SIZE = 400000;// 缓冲区大小
public static final String DB_NAME = "idioms.db";// 保存的数据库文件名
public static final String PACKAGE_NAME = "cn.edu.bztc.happyidiom";// 应用的包名
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 myDataPath = new File(DB_PATH);
if (!myDataPath.exists()) {
myDataPath.mkdirs();// 如果没有这个目录则创建
}
String dbfile = myDataPath + "/" + 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 (NotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
</span>
五.测试数据库有没有创建到指定的路径下面,修改AndroidManifest.xml文件搭建起单元测试的环境。修改文件如下
<span style="font-size:10px;"><?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.edu.bztc.happyidiom" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/logo" android:label="@string/app_name" android:theme="@style/AppTheme" > <uses-library android:name="android.test.runner"/> </application> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="cn.edu.bztc.happyidiom"> </instrumentation> </manifest></span>
只要加入上述代码,单元环境就搭建起来了。
六.在test包下,新建DBOpenHelperTest继承AndroidTestCase。
<span style="font-size:10px;">import cn.edu.bztc.happyidiom.db.DBOpenHelper;
import android.test.AndroidTestCase;
public class DBOpenHelperTest extends AndroidTestCase{
public void testDBCopy(){
DBOpenHelper dbOpenHelper=new DBOpenHelper(getContext());
dbOpenHelper.openDatabase();
}
}</span>
七.右击DBOpenHelperTest文件,选择Run as后选择Android JUnit Test进行单元测试。出现绿条,代表测试成功。如果测试代码存在错误,则会出现红条并在下方显示出错原因。
八.查看数据库有没有复制成功,切换到DDMS。我们发现在data/data/应用的包下成功的建立了数据库。