我已经使用 LogCat 来确定问题所在。
我试图在 onCreate 中执行的 SQL 字符串是..
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();
}
如果我没记错的话,因为我的数据库尚未创建(我通过事先卸载它来确保这一点)。onCreate SQLiteHelper 在调用 open() 方法时被调用。
这是我调用该 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)
{}
}
谢谢您的帮助!