SQLiteOpenHelper的对象只能在onAttach中声明,而在其他地方声明

时间:2015-01-30 12:21:51

标签: android android-fragments android-sqlite sqliteopenhelper

我有一个扩展SQLiteOpenHelper的类,在活动中,我声明变量MQTT_Settings_DBSQLiteDatabase如下所示。

问题是当我声明变量MQTT_Settings_DB并在代码中显示全局初始化时,在运行时,此行

this.sqliteDB = this.mqttSettingsDB.getWritableDatabase();
commitToSQLiteDB()中存在的

导致应用程序崩溃并且我收到NPE,为了解决此问题,我放置了

的声明
this.mqttSettingsDB
<{1>}中的

如下

onAttach()

应用程序不会崩溃。

为什么对象onAttach() { this.mqttSettingsDB = new MQTT_Settings_DB(getActivity()); } MQTT_Settings_DB中定义且无法全局定义?

onAttach

1 个答案:

答案 0 :(得分:1)

private MQTT_Settings_DB mqttSettingsDB = new MQTT_Settings_DB(getActivity());
在片段附加到活动之前,

getActivity()会返回null。将null传递给SQLiteOpenHelper构造函数不会立即崩溃,但是当您尝试使用例如实例打开数据库时它将会崩溃。 getWritableDatabase()