我正在运送Realm db with app并在firstrun上填充db
我遇到的问题是,如果我正在运行Dialog并填充Asyn任务或在新线程中那么当我将realm db实例化为
realm = realm.getDefaultInstance();
从技术上讲,它应该在数据库填充结束后运行,因此我收到错误
如果用于打开同一文件,则配置不能有所不同。
用于填充db的代码是
RealmConfiguration config = new RealmConfiguration.Builder(context)
.name(Realm.DEFAULT_REALM_NAME)
.migration(new in.webic.longevity.longevity.Word())
.assetFile(context, "Default.realm")
.schemaVersion(0)
.build();
realm = realm.getInstance(config);
realm.close();
当此代码运行时出现一个空白屏幕,我希望它被ProgressDialog或类似的替换为
我正在使用这段代码但其他一切都应该在db的填充完成之后运行,这是我无法实现的
if (isFirstRun)
{
new Thread()
{
public void run()
{
try
{
RealmConfiguration config = new RealmConfiguration.Builder(context)
.name(Realm.DEFAULT_REALM_NAME)
.migration(new in.webic.longevity.longevity.Word())
.assetFile(context, "Default.realm")
.schemaVersion(0)
.build();
realm = realm.getInstance(config);
realm.close();
}
catch (Exception e)
{
Log.e("tag",e.getMessage());
}
// dismiss the progressdialog
progressDialog.dismiss();
}
}.start();
SharedPreferences.Editor editor = wmbPreference.edit();
editor.putBoolean("FIRSTRUN", false);
editor.commit();
}
我无法找到如何在同步显示对话框时填充数据库
请帮助任何代码段或提示将有所帮助
问候
答案 0 :(得分:0)
如果用于打开同一文件,则配置不能有所不同。
如果equals()
与两种配置不匹配,则会收到此错误。这很可能是因为您的Migration对象的hashCode和equals没有重新定义。
public class Word extends Migration {
//...migration
@Override
public int hashCode() {
return Word.class.hashCode();
}
@Override
public boolean equals(Object obj) {
return obj != null && obj instanceof Word;
}
}
(或者只使用相同的配置实例)