我已经使用 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)
{}
}
感谢您的帮助!
最佳答案
好像我没有发表评论的权限。一个问题:ssDatabase.execSQL(sqlCreateCommand);
--> 这不应该是 db.execSQL(sqlCreateCommand);
因为参数是 SQLiteDatabase db。其次你使用_id。这个索引不是默认创建的吗?没关系,如果这与它无关。这只是我的想法。 :)
关于java - Android - 为什么我在 SQLiteOpenHelper onCreate 中收到 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13953197/