我一直致力于在表格中创建和插入数据。目前我有一个带可扩展列表的对话框。用户选择少量内容并完成点击;它调用一个创建表并插入数据的类。
程序流程为:
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();
答案 0 :(得分:0)
您的Tables
有两个构造函数,而您使用public Tables(int[] ncup_array)
的构造函数不会初始化database
成员变量。