0

我创建了这张表:

"create table "  + DATABASE_TABLE + " ("
    + KEY_ROWID + " integer primary key autoincrement not null, "
    + KEY_TITLE + " text not null, "
    + KEY_BODY + " text not null, " + KEY_DATE_TIME + " text not null);"

这是我为插入所做的:

ContentValues initialValues = new ContentValues();
initialValues.put("title", title);
initialValues.put("body", body);
initialValues.put("abc", anc);
return mDb.insert(DATABASE_TABLE, null, initialValues); 

但由于一些错误,我的应用程序强制关闭。请帮帮我...

Logcat 错误:

java.lang.NullPointerException
com.maddy.task_reminder.ReminderDbAdapter.createReminder(ReminderDbAdapter.java:133)
06-09 23:28:44.112: E/AndroidRuntime(412):  at com.maddy.task_reminder.edit_activity$4.onClick(edit_activity.java:143)
4

2 回答 2

0

如果你看 java.lang.NullPointerException com.maddy.task_reminder.ReminderDbAdapter.createReminder(ReminderDbAdapter.java:133) 06-09 23:28:44.112: E/AndroidRuntime(412): at com.maddy.task_reminder.edit_activity$4.onClick(edit_activity.java:143)

edit_activity.java:143您在和处有错误ReminderDbAdapter.java:133。什么东西在那里?

我的代码看起来像这样

    `public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_NAME + " TEXT NOT NULL, " +
                KEY_REL + " TEXT NOT NULL);"
        );
    }`

public long createEntry(String name, String rel) {
    // TODO Auto-generated method stub
    ContentValues cv = new ContentValues();
    cv.put(KEY_NAME, name);
    cv.put(KEY_REL, rel);
    return water.insert(DATABASE_TABLE, null, cv);
}

它工作正常。

于 2012-06-09T18:18:09.023 回答
0

如果您正在关注 Web 上的通用 DBAdapter 示例,请检查您是否调用:

mDbHelper.open();

在您的活动中。否则mDb永远不会在您的数据库助手类中实例化,它总是null.

评论补充:

所以这是你的open()方法。

public ReminderDbAdapter open() throws SQLException { 
    mDbHelper = new DatabaseHelper(mCtx); 
    mDb = mDbHelper.getWritableDatabase(); 
    return this; 
}

如果您的 ReminderDbAdapter 构造函数看起来不像这样:

public ReminderDbAdapter(Context context) {
    ...
    mCtx = context;
    open(); // Do you have this line?
}

然后你需要显式调用ReminderDbAdapter.open()你的活动,可能是这样的:

ReminderDbAdapter mDbHelper = new ReminderDbAdapter(this); 
mDbHelper.open();
于 2012-06-09T18:34:04.890 回答