尝试打开SQLite数据库时出现Nullpointerexception

时间:2016-02-23 16:37:36

标签: java android sqlite nullpointerexception null

我在LogCat中获得以下行,在打开dbHelper数据库时似乎指向空SQLite

java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
    at com.---.---.GasDataSource.open(GasDataSource.java:29)
    at com.---.---.Vehicle.<init>(Vehicle.java:33)
    at com.---.---.GasFragment$1$3.onClick(GasFragment.java:212)
    at android.view.View.performClick(View.java:5201)
    at android.view.View$PerformClick.run(View.java:21163)
    at android.os.Handler.handleCallback(Handler.java:746)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5443)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

这是Stacktrace中列出的代码链(它引用了三行):

  1. 实例化新对象:

    Vehicle v = new Vehicle(getActivity(), vId); // GasFragment.java:212
    
  2. 打开对象内的数据源以加载现有属性

    public Vehicle(Context mContext, int vehicleId) {
    
    GasDataSource datasource = new GasDataSource(mContext);
    datasource.open(); // Vehicle.java:33
    
  3. 执行实际的Open方法

    database = dbHelper.getWritableDatabase(); // GasDataSource.java:29
    
  4. 补充代码:GasDataSource构造函数:

    public GasDataSource(Context context) {
        dbHelper = new MySQLiteHelper(context);
    }
    
  5. 我不明白dbHelper如何为空。我唯一能想到的是上下文为空或数据库已经关闭,因为这发生在应用程序在后台很长一段时间,当我打开它并点击活动中的“保存”按钮时(触发)这段代码部分)。

    有人可能确定原因,如果没有,至少在这里进行空检查的最佳方法是什么?在这一行上做这件事似乎很奇怪(我之前从未见过它在例子中):dbHelper.getWritableDatabase();

0 个答案:

没有答案