android 数据库插入空指针异常

房乔 发布于 2016/07/07 10:38
阅读 425
收藏 0

DB类:

public class DB extends SQLiteOpenHelper {


    private static final String DB_NAME = "DB_PERSON";
    private static final int version = 1;
    String sql = "CREATE TABLE " + DB_NAME + "(" + "id" + " INTEGER PRIMARY KEY AUTOINCREAMENT," + "name"
            + " VARCHAR(30) NOT NULL,"  + "address" + " VARCHAR(40) NOT NULL)";
    
    
    
    public DB(Context context) {
        super(context, DB_NAME, null, version);
        // TODO Auto-generated constructor stub
        
    }

    @Override
    public void onCreate(SQLiteDatabase arg0) {
        // TODO Auto-generated method stub
        arg0.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub

    }

}

Dao类:

public interface PeopleDao {

    public boolean addPerson(ContentValues values);
    public boolean deletePerson(ContentValues values);
    public boolean updatePerson(ContentValues values);
    public List<Map<String,String>> personList(ContentValues values);
    
    
}

Service类:
public class PeopleService implements PeopleDao {

    private DB db = null;
    
    public PeopleService(Context context)
    {
         db = new DB(context);
    }
    
    
    public boolean addPerson(ContentValues values) {
        // TODO Auto-generated method stub
        boolean flag = false;
        SQLiteDatabase myDB = db.getWritableDatabase();
           Long id = myDB.insert("DB_PERSON", null, values);
        if(id==-1)
            return false;
        else
            return true;
    }

    public boolean deletePerson(ContentValues values) {
        // TODO Auto-generated method stub
        return false;
    }

    public boolean updatePerson(ContentValues values) {
        // TODO Auto-generated method stub
        return false;
    }

    public List<Map<String, String>> personList(ContentValues values) {
        // TODO Auto-generated method stub
        return null;
    }

}

单元测试类:

public class ServiceTest extends AndroidTestCase {

    
    private PeopleService ser;
    public ServiceTest() {
      ser = new PeopleService(getContext());
    }

    public void AddPerson() {
        ContentValues values = new ContentValues();
        values.put("id", 001);
        values.put("name", "yanminling");
        values.put("address", "shenzhen");
        Boolean flag =  ser.addPerson(values);
        System.out.println("----->"+flag);
    }

其中,红字那行有问题,报的是空指针异常错误,问问各位大哥大姐,这样编码数据库没办法创建吗。。


加载中
0
菜鸟早起
问题出在测试类里,获取上下文的 getContext()方法 调用时机, 你这样调用,junit测试框架都有可能还没有准备好, 是获取不到Context的 , 解决方式: 重写 setUp 方法,在这里面调getContext() 。
房乔
房乔
还真是。。。谢谢了
返回顶部
顶部