繁体   English   中英

不同类中的openOrCreateDatabase导致空指针异常

[英]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而不检查任一dhxsContext为有效值。

sContextsContextmContext都没有初始化,这意味着由于现在没有适当的检查,您很容易无意间调用了put_default_value ,而从未真正调用过任何一个构造函数。 这不是最佳实践。


编辑:

一种防止这种情况的方法是将默认构造函数设为私有,以便必须通过调用您提供的构造函数之一来创建该类的实例:

private:
    OurClass ( void ) {
    }

即使这样做,您仍然需要正确地验证输入以至少检测空指针-您不能仅仅假设它会按预期运行,因为它现在显然还不是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM