LogCat を使用して問題の行を特定しました。
onCreate で実行しようとしている SQL 文字列は..
CREATE TABLE Routines(_id integer primary key autoincrement, json TEXT);
これを実行しようとすると、問題が発生します。
これが原因である可能性がありますNullPointerException
。何も問題がないと思われる場合は、もう少し背景を読んでください。
このデータベースはまだ作成されていませんNullpointerException
.
ただし、onCreate メソッドを使用する必要があるため、これについて言及します。以下に示すように、メイン コードで新しいDatabaseOpenHelper
(拡張 SQliteOpenHelper) を作成し、ヘルパーの open() メソッドを呼び出します。
public void open() throws SQLException
{
ssDatabase = databaseOpenHelper.getWritableDatabase();
}
データベースが作成されていないため、間違っていなければ(事前にアンインストールして確認しました)。その open() メソッドが呼び出されると、 onCreate SQLiteHelper が呼び出されます。
これは、open メソッドを呼び出すコードです。
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)
{}
}
助けてくれてありがとう!