【发布时间】:2013-05-13 01:15:13
【问题描述】:
我从未见过有人从另一个方法中显式调用其中一个系统回调方法,例如 onCreate() 或 onDestroy()。它只是看起来不对。我以为我在一些例子中看到了这一点,我不敢相信。是我的想象还是真的?
在下面的 SQLiteOpenHelper 类的 onUpgrade() 方法的代码中,我从另一个函数显式调用 onCreate() 方法。是否可以从该方法内部调用 onCreate() ?有没有更好的方法可以在不调用 onCreate() 的情况下做到这一点?
private static class DatabaseHelper extends SQLiteOpenHelper{
DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" + LentItems.NOTE_ID + "ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
LentItems.TITLE + " TEXT, " + LentItems.TEXT + " TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int previousVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db); // <-- EXPLICIT CALL TO ONCREATE
}
} // end DatabaseHelper inner class
【问题讨论】:
-
你为什么还要这样做而不使用
startActivity()? -
我看到在某些示例中使用了对 onCreate() 的调用,但是如果对 startActivity() 的调用是更好的方法,我会改为尝试
-
我生活在另一个宇宙吗?为什么所有 cmets 和答案都建议您使用 startActivity?我以为你向我们展示的这个东西是关于 SQLiteOpenHelper 的?所以它应该调用
new DatabaseHelper(context)吗?而且不,onUpgrade 将在 onCreate 之后调用,不需要在 onUpgrade 中显式调用 onCreate,这是非常糟糕的示例之一。 -
@Kevik 抱歉,我看到了
onCreate()和onDestroy()并以为你在谈论从那里开始一个单独的Activity并跳了枪 -
@Chor WaiChun 说 onUpgrade 在 onCreate 之后调用的文件在哪里?
标签: android sqlite android-contentprovider oncreate sqliteopenhelper