1. 先做好基础工作把数据库导入到项目工程中,这是第一步。
(1)我们知道android的数据库存放在/data/data/package name/目录下,所以我们需要做的是把已有的数据库传入到那个目录下。思路是用FileInputStream读取原数据库,再用FileOutputStream把读到的东西写入到那个目录。这样就可以方便的操作数据库了。在res目录下新建raw目录,将idioms.db数据库复制到此目录下,这是因为raw目录中的东西,android会原封不动的拷贝到程序中,而不会转换成二进制文件。在db包下创建一个DBOpenHelper类。代码实现的功能主要是使用输入输出流将idioms.db复制到手机中默认存放数据库的位置。
在这块需要注意的是路径问题
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><strong>public static final String DB_PATH="/data"
+Environment.getDataDirectory().getAbsolutePath()+"/"
+PACKAGE_NAME+"/databases";//在手机里存放数据库的位置</strong></strong></span></span>
在创建这个类时,这块出错了,我以为是字符串连接,但是搞错了。导致android无法原封不动的拷贝到程序中,实际上是在/data/data/package name/目录下,PACKAGE_NAME存放应用的包名,getDataDirectory得到数据库记录。
究竟有没有复制成功还缺少一个环节,搭建单元测试环境,测试数据库有没有创建到指定的路径下面。
(2)首先修改AndroidMainfest.xml文件搭建起单元测试的环境。插入这段代码,单元环境就搭建起来了。
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><application
android:allowBackup="true"
android:icon="@drawable/logo"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-library android:name="android.test.runner" /> </strong></span></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><application>
</strong></span></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.edu.bztc.happyidiom" >
</instrumentation></strong></span></span>
(3)在test包下,新建DBOpenHelperTest继承AndroidTestCase。
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>package cn.edu.bztc.happyidiom.test;
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();
}
}
</strong></span></span>
该类中只封装了一个方法,测试方法通常命名为test***()。该方法调用了DBOpenHelper类里面定义的openDatase()方法。运行出现这种情况即可
看看数据库有没有复制成功,切换到DDMS。
2.(1) 在entity包下新建一个Animal类。实体类的内容非常简单,基本就是生成数据库表对应字段的set和get方法。
(2)在dao包下创建一个AnimalDao类。在此需要注意的是在animal调用set方法时把解释的一层落下了。
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><strong> animal.setExplain(cursor.getString(cursor.getColumnIndex("explain")));</strong></span></span>
AnimalDao是一个单例类,我们将他的构造方法私有化,并提供了一个getInstance()方法来获取AnimalDao的实例,保证全局范围内只会有一个AnimalDao实例,在AnimalDao中提供了一个方法getAllAnimals()该方法用来获取所有的动物类成语。
(3)编写单元测试类AnimalDaoTest继承AndroidTestCase。运行出现这种情况即可