黑马程序员安卓教程:内容提供者之数据库创建.docx
文本预览下载声明
内容提供者之数据库的创建如何使用内容提供者,下面我们通过一个案例来讲解类容提供者的使用方法。首先,新建一个数据库应用,具体步骤如下:新建工程【File】【new】【Android Application Project】命名为:01_数据库应用编写数据库帮助类新建一个数据库帮助类,使之继承SQLiteOpenHelper。在该数据库的onCreate方法中新建一个表,代码如例1-1:例1-1 PersonDBOpenHelper类public class PersonDBOpenHelper extends SQLiteOpenHelper {//构造方法,调用此方法新建一个person.db的数据库并返回一个数据库帮助类的对象public PersonDBOpenHelper(Context context) {super(context, person.db, null, 1);}@Overridepublic void onCreate(SQLiteDatabase db) {//创建该数据库的同时新建一个info表,表中有-id,name这两个字段db.execSQL(create table info (_id integer primary key autoincrement, name varchar(20)));}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}新建测试类新建一个测试包(com.itheima.db.test),在该包下新建一个测试类TestPersonDB.java。工程结构如图1-1所示:图1-1所示配置测试环境在项目清单文件中配置测试环境,首先在manifest节点下配置测试指令集,代码例1-2:例1-2instrumentation android:name=android.test.InstrumentationTestRunner android:targetPackage=com.itheima.db /instrumentation在清单文件中application节点下配置测试库,代码如例1-3:例1-3uses-library android:name=android.test.runner /编写测试代码在测试类中编写测试代码,测试数据库能否新建成功,代码如例1-4:例1-4public class TestPersonDB extends AndroidTestCase {public void testCreateDB() throws Exception {PersonDBOpenHelperhelper= new PersonDBOpenHelper(getContext());helper.getWritableDatabase();}调用getContext方法返回一个上下文对象Context,调用PersonDBOpenHelper帮助类的getWritableDatabase方法创建一个数据库,测试该方法通过,此时从DDMS的文件浏览中可以看到新建的数据库,效果如图1-2所示:图1-2所示若将例1-4中的代码调整为如下例1-5所示,即在new一个PersonDBOpenHelper对象时,将该语句放在testCreateDB方法之外。例1-5public class TestPersonDB extends AndroidTestCase {PersonDBOpenHelperhelper= new PersonDBOpenHelper(getContext());public void testCreateDB() throws Exception {helper.getWritableDatabase();}测试该方法,此时测试不通过,此时测试框架打印如图1-3所示的信息图1-3所示有图1-3可知,在测试testCreateDB方法时在该测试类的第14行发生了空指针异常,即helper.getWritableDatabase()报空。这是因为helper对象为空,helper为空的原因是getcontext方法返回的一个上下文对象为空。对比例1-2和例1-3可知:Android测试框架会首先找到该测试类,然后利用反射机制装载该测试类的字解码,此时该测试类的成员变量也会被装载进来即helper会被装载到该字节码中,但此时测试环境的上下文并没有准备好,所以会出现空指针。对例1-2代码进一步优化,我们可以重写该测试类的setUp方法做一系列的初始化操作,在tearDown方法中做一些结束操作。代码如例1-6例1-6public
显示全部