显示ProgressDialog填充Realm db时

时间:2016-09-18 08:31:16

标签: android multithreading realm progressdialog

我正在运送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();

    }


我无法找到如何在同步显示对话框时填充数据库
请帮助任何代码段或提示将有所帮助
问候

1 个答案:

答案 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;
    }
}

(或者只使用相同的配置实例)