我已经定义了一个在我的项目中使用的新类,我在上下文中得到了空指针异常
这是我编码的内容:
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");
}
答案 0 :(得分:0)
在使用Context
之前,您实际上并未检查OurClass(dhaService dhx)
是否有效。
例如,如果使用null
Context
调用putDefaultValue
,则NullPointerException
会因sContext
而失败,因为dhx
已分配dhx
的值,而不检查sContext
或sContext
的有效值。
在旁注中,mContext
和put_default_value
都没有被初始化,这意味着由于您现在没有进行适当的检查,您可能很容易无意中拨打private:
OurClass ( void ) {
}
,而从未实际调用任何一个构造函数。这不是最佳做法。
编辑:
防止这种情况的一种方法是将默认构造函数设为私有,以便通过调用您提供的构造函数来创建类的实例:
{{1}}
即使你这样做,你仍然需要正确验证你的输入以至少检测空指针 - 你不能只是假设它将按你的意图一直工作,因为它显然不是现在。