我的库模块中有一个抽象的 BaseActivity:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Normal method to inflate the layout
mBinding = DataBindingUtil.setContentView(this, R.layout.base_view_stub_layout);
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
if (mBinding != null && mBinding.viewStub != null && mBinding.viewStub.getViewStub() != null) {
mBinding.viewStub.getViewStub().setLayoutResource(getLayoutId());
}
if (!hasStubInflated) {
View inflatedView = mBinding.viewStub.getViewStub().inflate();
//Abstract method
onViewStubInflated(inflatedView, savedInstanceState);
//Normal method to hide progress bar
onViewStubInflated();
}
initControllers();
handleViews();
setListeners();
restoreValues(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)
AppModule 中的 MainActivity 扩展了库模块的 BaseActivity,因此获得了一个抽象方法来覆盖:
MainActivity 扩展了 BaseActivity
private ActivityMainBinding mBinding;
@Override
public int getLayoutId() {
return R.layout.activity_main;
}
@Override …
Run Code Online (Sandbox Code Playgroud) data-binding android viewstub android-databinding android-architecture-components
如果我的数据库版本为10,我需要为Room迁移选择几种方法?
我查看了以下示例Google Persistence Migration Sample
我发现了基于数据库版本4可能场景的Migration varargs。
public static UsersDatabase getInstance(Context context) {
synchronized (sLock) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
UsersDatabase.class, "Sample.db")
.addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_1_4)
.build();
}
return INSTANCE;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,假设我正在使用db v1中的Room,并且当我的应用程序到达db v10时,我将要编写多少种迁移方法?
在sqlite中,我们获得了已安装应用程序的当前数据库版本,onUpgrade
而我们只是通过了switch情况而没有break语句,因此它可以满足所有数据库升级。
但是,我不确定,但是afaik,我们无法在房间中获取已安装应用程序的当前数据库版本,我们编写了所有可能的迁移方法。
但是感觉很不方便,如果我有db v10,则不宜编写总共45种方法!
有更好的解决方案吗?
android ×2
android-architecture-components ×1
android-room ×1
data-binding ×1
database ×1
sqlite ×1
viewstub ×1