[英]openOrCreateDatabase in different class causes null pointer exception
我定义了一个新类在项目中使用,并且在上下文中得到了空指针异常
这是我编码的内容:
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
是否有效。
例如,如果OurClass(dhaService dhx)
是带一个null
Context
,然后putDefaultValue
将失败, NullPointerException
因为sContext
被分配的值dhx
而不检查任一dhx
或sContext
为有效值。
sContext
, sContext
和mContext
都没有初始化,这意味着由于现在没有适当的检查,您很容易无意间调用了put_default_value
,而从未真正调用过任何一个构造函数。 这不是最佳实践。
编辑:
一种防止这种情况的方法是将默认构造函数设为私有,以便必须通过调用您提供的构造函数之一来创建该类的实例:
private:
OurClass ( void ) {
}
即使这样做,您仍然需要正确地验证输入以至少检测空指针-您不能仅仅假设它会按预期运行,因为它现在显然还不是。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.