Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLiteOpenHelper NullPointerException_Android_Sqlite - Fatal编程技术网

Android SQLiteOpenHelper NullPointerException

Android SQLiteOpenHelper NullPointerException,android,sqlite,Android,Sqlite,我在这里有另一篇类似于这篇文章的文章,但是,我对我的课程做了一些更改,现在有了一个不同的问题。以前的问题也没有解决 我的应用程序需要能够从两个不同的事件写入android上的sqlite3数据库。我的一个事件就是向数据库写入数据。当第二个事件尝试写入数据库时,会发生附加错误 我无法解决这个问题。我已经看了一个多星期了。非常感谢您的帮助。如果需要任何其他信息,请告诉我!只要我能解决这个问题,我就会发布我所有的东西,这让我很紧张 The Error Logcat 03-22 23:50:27.065

我在这里有另一篇类似于这篇文章的文章,但是,我对我的课程做了一些更改,现在有了一个不同的问题。以前的问题也没有解决

我的应用程序需要能够从两个不同的事件写入android上的sqlite3数据库。我的一个事件就是向数据库写入数据。当第二个事件尝试写入数据库时,会发生附加错误

我无法解决这个问题。我已经看了一个多星期了。非常感谢您的帮助。如果需要任何其他信息,请告诉我!只要我能解决这个问题,我就会发布我所有的东西,这让我很紧张

The Error Logcat
03-22 23:50:27.065: INFO/System.out(281): Where: DB-submitData
03-22 23:50:30.846: WARN/System.err(281): java.lang.NullPointerException
03-22 23:50:30.865: WARN/System.err(281):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
03-22 23:50:30.865: WARN/System.err(281):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
03-22 23:50:30.875: WARN/System.err(281):     at cpe495.smartapp.SmartDBHelper.open(SmartDBHelper.java:70)
03-22 23:50:30.875: WARN/System.err(281):     at cpe495.smartapp.DataBuilder.submitData(DataBuilder.java:37)
03-22 23:50:30.884: WARN/System.err(281):     at cpe495.smartapp.DataBuilder.prepareData(DataBuilder.java:29)
03-22 23:50:30.904: WARN/System.err(281):     at cpe495.smartapp.SmartApp$2.dataAnalyzedReceived(SmartApp.java:56)
03-22 23:50:30.904: WARN/System.err(281):     at cpe495.smartapp.DataRobot.fireDataAnalyzedEvent(DataRobot.java:269)
03-22 23:50:30.916: WARN/System.err(281):     at cpe495.smartapp.DataRobot.analyzeData(DataRobot.java:79)
03-22 23:50:30.925: WARN/System.err(281):     at cpe495.smartapp.SmartApp$1.dataReceivedReceived(SmartApp.java:49)
03-22 23:50:30.935: WARN/System.err(281):     at cpe495.smartapp.ConnectDevice.fireDataReceivedEvent(ConnectDevice.java:79)
03-22 23:50:30.945: WARN/System.err(281):     at cpe495.smartapp.ConnectDevice.run(ConnectDevice.java:46)
03-22 23:50:30.945: WARN/System.err(281):     at java.lang.Thread.run(Thread.java:1096)  





DatabaseHelper类定义为静态。这是所有问题的根源。当嵌套类被声明为静态时,它无权访问实例变量和封闭类的方法


更多详细信息请阅读

您的DatabaseHelper类定义为静态。这是所有问题的根源。当嵌套类被声明为静态时,它无权访问实例变量和封闭类的方法


更多详细信息请阅读

SQLiteOpenHelper.java:98是db=mContext.openOrCreateDatabase(mName,0,mFactory)


因此,您在SQLiteOpenHelper中设置了空上下文

SQLiteOpenHelper.java:98是db=mContext.openOrCreateDatabase(mName,0,mFactory)

因此,您在SQLiteOpenHelper中设置了空上下文这是一个老问题,但其接受的答案是错误的,作者无法删除整个内容,因此为了将来的访问者,这里是答案

在DataBuilder中,在将上下文初始化到SmartDBHelper的构造函数之前,您正在传递该上下文

SmartDBHelper sDBH = new SmartDBHelper(this);
必须等到
onCreate()
访问有效的上下文:

public class DataBuilder extends Activity {
    private List _listeners = new ArrayList();
    private SmartDataObject data;
    SmartDBHelper sDBH;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.v("databuilder", "on create");
        sDBH = new SmartDBHelper(this);
    }

    // Rest of class
}
此外,我不认为DataBuilder或SmartDBHelper应该扩展活动。它们不使用任何活动的方法,并且您不能通过调用
new DataBulder()
来启动活动:

这是一个古老的问题,但其公认的答案是错误的,作者不能删除整个内容,因此为了未来的访问者,这里是答案

在DataBuilder中,在将上下文初始化到SmartDBHelper的构造函数之前,您正在传递该上下文

SmartDBHelper sDBH = new SmartDBHelper(this);
必须等到
onCreate()
访问有效的上下文:

public class DataBuilder extends Activity {
    private List _listeners = new ArrayList();
    private SmartDataObject data;
    SmartDBHelper sDBH;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.v("databuilder", "on create");
        sDBH = new SmartDBHelper(this);
    }

    // Rest of class
}
此外,我不认为DataBuilder或SmartDBHelper应该扩展活动。它们不使用任何活动的方法,并且您不能通过调用
new DataBulder()
来启动活动:


当DatabaseHelper类不是静态的时,我得到了相同的结果。我已经测试过了,我改成了静态的,因为几天前有人建议我试一下。在这种情况下,我不确定。在调用getWritableDatabase方法之前,您是否可以检查dBH是否为null?我已经测试了这个方法,每次我进行更改时都这样做,据说可以解决这个问题。按照上面列出的方法,dBH在调用getWritableDatabase之前不为null。但是其他实现是空的。这并没有解决问题,但是,我将接受这个答案,因为这个人试图帮助我。我已经找到了另一种方法来解决我正在尝试的问题,所以解决这个问题不再是至关重要的。如果有人发布了将来可以解决问题的东西,我将更改接受的答案。如果DatabaseHelper类不是静态的,我将得到相同的结果。我已经测试过了,我改成了静态的,因为几天前有人建议我试一下。在这种情况下,我不确定。在调用getWritableDatabase方法之前,您是否可以检查dBH是否为null?我已经测试了这个方法,每次我进行更改时都这样做,据说可以解决这个问题。按照上面列出的方法,dBH在调用getWritableDatabase之前不为null。但是其他实现是空的。这并没有解决问题,但是,我将接受这个答案,因为这个人试图帮助我。我已经找到了另一种方法来解决我正在尝试的问题,所以解决这个问题不再是至关重要的。如果有人发布了将来可以解决问题的帖子,我会更改已接受的答案。不要接受那些实际上不是答案的答案。你强迫人们通读评论列表,发现它实际上不是答案。投票结束。因为它太本地化了,对未来的访问者没有帮助。不要接受实际上不是答案的答案。你强迫人们通读评论列表,发现它实际上不是答案。投票结束。因为它太本地化了,对未来的访问者没有帮助。对我来说,这是一个问题,和这里一样:没错。在我的情况下,这是一个问题,与此相同:
SmartDBHelper sDBH = new SmartDBHelper(this);
public class DataBuilder extends Activity {
    private List _listeners = new ArrayList();
    private SmartDataObject data;
    SmartDBHelper sDBH;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.v("databuilder", "on create");
        sDBH = new SmartDBHelper(this);
    }

    // Rest of class
}
public class DataBuidler {

public class SmartDBHelper {