SQlite数据库NullPointer在单击对话框中的按钮时插入数据时发生异常

时间:2014-04-14 10:10:36

标签: android sqlite

我一直致力于在表格中创建和插入数据。目前我有一个带可扩展列表的对话框。用户选择少量内容并完成点击;它调用一个创建表并插入数据的类。


程序流程为:

MainActivity - > onCreate(添加适配器,使用可扩展列表进行对话) - > onResume - > callAsync - > doInBackground(DAO实例,instance.open,doStuff,instance.close)。

DAO构造函数 - > (帮助者实例); DAO打开 - > (db = helper.getWritableDatabase())

帮助 onCreate - > execSQL命令 - >表(db)构造函数 - >所有表格都是s

对话 - > makeStuff - > onClick - > (计算用于制作表格的数组) - >表(数组)构造函数 - > ERROR在这里显示NPE。


我已将当前文件推送到github。在onCreate辅助方法完成后,数据库是否关闭?我没有看到数据库显示空指针异常的任何其他原因。在添加TABLE_NCUP之前,一切都运行良好,直到昨晚。

logcat的

    04-14 10:12:26.654: E/AndroidRuntime(2560): FATAL EXCEPTION: main
04-14 10:12:26.654: E/AndroidRuntime(2560): Process: com.example.try_sqlite_url, PID: 2560
04-14 10:12:26.654: E/AndroidRuntime(2560): java.lang.NullPointerException
04-14 10:12:26.654: E/AndroidRuntime(2560):     at com.example.try_sqlite_url.Tables.<init>(Tables.java:22)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at com.example.try_sqlite_url.DialogMaker$1.onClick(DialogMaker.java:70)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at android.view.View.performClick(View.java:4438)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at android.view.View$PerformClick.run(View.java:18422)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at android.os.Handler.handleCallback(Handler.java:733)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at android.os.Handler.dispatchMessage(Handler.java:95)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at android.os.Looper.loop(Looper.java:136)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at android.app.ActivityThread.main(ActivityThread.java:5017)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at java.lang.reflect.Method.invokeNative(Native Method)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at java.lang.reflect.Method.invoke(Method.java:515)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-14 10:12:26.654: E/AndroidRuntime(2560):     at dalvik.system.NativeStart.main(Native Method)

更新

感谢@laalto,我认为变量我现在正在制作两个不同的实例,而第二个实例没有初始化database。所以我尝试使用getInstance方式参考here。现在,通过onClick in对话框调用Tables时instance为空。更改的代码是:

Tables.java

public static Tables tableInstance;

public static Tables getInstance(SQLiteDatabase db) {
    if (tableInstance == null) {
        Log.d("TABLE", "in Table getInstance db");
        tableInstance = new Tables(db);
    }
    return tableInstance;
}

public static Tables getInstance(int[] array) {
    Log.d("TABLE", "in Table getInstance array");
    return tableInstance;
}

在对话框中单击按钮后调用表实例:

Tables instance = Tables.getInstance(ncup);
instance.Tables(ncup); // <----- THIS IS NULL!
dialog.dismiss();

1 个答案:

答案 0 :(得分:0)

您的Tables有两个构造函数,而您使用public Tables(int[] ncup_array)的构造函数不会初始化database成员变量。