每当我应用程序中的数据库的较旧版本替换应用程序的现有版本时,我都需要覆盖onDowngrade方法,以便调用onDowngrade()
即(较新版本的db)
例:
当我尝试使用数据库版本3安装新应用程序时,将使用数据库版本2替换当前或已安装的应用程序,但从未调用此onDowngrade方法。
我希望我的问题很清楚。请通过回答这个问题来给这个方法一些想法。
我的新版本应用程序源代码:
public class MyDatabase extends SQLiteOpenHelper
{
private static final int DB_VERSION = 10;
public MyDatabase(Context context)
{
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
Log.d("Method","onCreate called");
.....
.....
.....
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.d("Method","onUpgrade called");
.....
.....
.....
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.d("Method","onDowngrade called");
.....
.....
.....
}
}
Manifest.xml
版本代码:10
我的旧版应用程序源代码:
public class MyDatabase extends SQLiteOpenHelper
{
private static final int DB_VERSION = 9;
public MyDatabase(Context context)
{
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
Log.d("Method","onCreate called");
.....
.....
.....
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.d("Method","onUpgrade called");
.....
.....
.....
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.d("Method","onDowngrade called");
.....
.....
.....
}
}
Manifest.xml
版本代码:9
最后,我的查询再次是我用旧应用程序替换了新应用程序(旧应用程序具有上述相应的源代码)。
但是较旧版本的应用程序不会调用
onDowngrade()
。 最佳答案
找到了这个特定问题的答案。
在我的AndroidManifest.xml文件中,minSdkVersion为8,如下所示,并且从不调用onDowngrade()。
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
,但是仅当minSdkVersion必须大于或等于11时,才会调用onDowngrade方法,如下所示。
解:
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="18" />