我已經使用LogCat來確定問題行。Android - 爲什麼我在SQLiteOpenHelper onCreate中收到NullPointerException?
SQL字符串我想在的onCreate執行是..
CREATE TABLE Routines(_id integer primary key autoincrement, json TEXT);
當試圖執行此操作,出現問題。
這可能是什麼導致NullPointerException
。如果你看不出有什麼問題,請閱讀更多背景知識。
這個數據庫還沒有創建,我不斷得到一個NullpointerException
,我已經把它和以前的SQLite代碼進行了比較,這個問題被證明是迴避的。
但是,我提到這一點,因爲它仍然需要通過onCreate方法。我在我的主代碼中創建了一個新的DatabaseOpenHelper
(擴展SQliteOpenHelper),並調用助手的open()方法,如下所示。
public void open() throws SQLException
{
ssDatabase = databaseOpenHelper.getWritableDatabase();
}
如果我沒有弄錯,因爲我的數據庫還沒有創建(我通過先卸載它來確保這一點)。當open()方法被調用時,onCreate SQLiteHelper被調用。
這是我稱之爲開放方法的代碼。
try
{
dbConnector = new DatabaseConnector (this);
debug = "2 ";
// This on first start will invoke the database onCreate method - throws SQLException
dbConnector.open(); /* PROBLEM LINE */
debug = "3 ";
}
catch (Exception e)
{
textView1.setText(debug + e.toString());
}
這是包含我DatabaseOpenHelper和onCreate方法
private class DatabaseOpenHelper extends SQLiteOpenHelper
{
public DatabaseOpenHelper(Context context, String name, CursorFactory factory, int version)
{
super(context, name, factory, version);
Log.i(TAG, "Constructor");
}
// On initial creation of database
@Override
public void onCreate(SQLiteDatabase db)
{
Log.i(TAG, "Before SQL command");
String sqlCreateCommand = "CREATE TABLE Routines"
+ "(_id integer primary key autoincrement, "
+ "json TEXT);";
Log.i(TAG, sqlCreateCommand);
// I believe this to be the PROBLEM LINE
ssDatabase.execSQL(sqlCreateCommand);
Log.i(TAG, "Jab done");
}
// On upgrade - currently do nothing
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{}
}
感謝您的幫助的代碼!
完整的堆棧跟蹤將很有用:) – span
您是否嘗試調試您的代碼以找到它? –
嗯,如果你的意思是在'問題'選項卡中的錯誤,那麼根本就沒有這條路徑。唯一的例外,就像我所指的那樣,我在TextView上顯示..也許有點小事要做:P在我的LogCat中,除了我自己的標記之外,還有一個例外。 – mgibson