我已经定义了一个新的类来在我的项目中使用,并且我在上下文中得到了空指针异常
这是我编码的:
public class OurClass extends Activity {
private dha mContext;
private dhaService sContext;
public OurClass(dha dha) {
sContext=null;
mContext = dha;
}
public OurClass(dhaService dhx) {
sContext = dhx;
mContext=null;
}
public void put_default_value( String varname, String value) {
Log.i("dha", "d1");
SQLiteDatabase db;
Log.i("dha", "d1.5");
if (mContext==null) {
Log.i("dha", "dx1");
db = sContext.openOrCreateDatabase("gipi.db", SQLiteDatabase.CREATE_IF_NECESSARY,null);
Log.i("dha", "dx2");
} else {
Log.i("dha", "dz1");
db = android.database.sqlite.SQLiteDatabase.openOrCreateDatabase("gipi.db", null);
Log.i("dha", "dz2");
}
在使用Context
之前,实际上并没有检查它们是否有效。
例如,如果用null
Context
调用OurClass(dhaService dhx)
,则putDefaultValue
将用NullPointerException
失败,因为sContext
被分配了dhx
的值,而没有检查dhx
或sContext
的有效值。
顺便说一句,sContext
和mContext
都没有初始化,这意味着由于目前缺乏正确的检查,您很容易在无意中调用put_default_value
,而实际上从未调用过任何一个构造函数。这不是最佳做法。
编辑:
防止这种情况的一种方法是将默认构造函数设为私有构造函数,这样就必须通过调用您提供的构造函数之一来创建类的实例:
private:
OurClass ( void ) {
}
即使你这样做了,你仍然需要正确验证你的输入,以至少检测到空指针——你不能只是假设它会按照你的意愿工作,因为现在显然不是这样。