簡體   English   中英

數據未存儲到領域數據庫中

[英]Data not stored into realm database

java.lang.IllegalStateException:您的領域是從沒有Looper的線程打開的,並且您提供了回調,我們需要一個Handler來調用您的回調

我正在寫一個將在后台執行的代碼-從文本文件(內部資產)中讀取,然后將它們放入領域數據庫中。但是我似乎收到此錯誤

“ java.lang.IllegalStateException:您的領域是從沒有Looper的線程打開的,並且您提供了回調,我們需要一個Handler來調用您的回調”

在我的onCreate我有這個

    Realm.init(context);
    realm = Realm.getDefaultInstance();

    ParseInBackground task = new ParseInBackground();
    task.execute();

在AsyncTask的后台執行任務中,我得到了這個

try {
            realm = Realm.getDefaultInstance();
            realm.executeTransactionAsync(new Realm.Transaction() {
                                              @Override
                                              public void execute(Realm bgRealm) {

                                                  final ModelClass modelClass = bgRealm.createObject(ModelClass.class);
                                                  try {
                                                      InputStream file = getAssets().open("goodie.txt");
                                                      reader = new BufferedReader(new InputStreamReader(file));
                                                      final String[] line = {reader.readLine()};
                                                      while (line[0] != null) {
                                                          handler.post(new Runnable() {
                                                              @Override
                                                              public void run() {
                                                                  try {
                                                                      line[0] = reader.readLine();
                                                                  } catch (IOException e) {
                                                                      e.printStackTrace();
                                                                  }
                                                                  String[] namelist = line[0].split(":");
                                                                  String iWord = namelist[0];
                                                                  String iDesc = namelist[1];
                                                                  modelClass.setName(iWord);
                                                                  modelClass.setDesc(iDesc);
                                                                  count++;

                                                              }
                                                          });

                                                      }
                                                  } catch (IOException e) {
                                                      e.printStackTrace();
                                                  } finally {
                                                      if (realm != null)
                                                          realm.close();
                                                  }
                                              }

                                          }, new Realm.Transaction.OnSuccess() {
                                              @Override
                                              public void onSuccess() {
                                                  Toast.makeText(MainActivity.this, "Added " + count + "items", Toast.LENGTH_SHORT).show();
                                              }
                                          }, new Realm.Transaction.OnError() {

                                              @Override
                                              public void onError(Throwable error) {


                                              }
                                          }
            );
        } catch (Exception e) {
            e.printStackTrace();
        }

而名為ModelClass的Model類具有此

private String name;
private String desc;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getDesc() {
    return desc;
}

public void setDesc(String desc) {
    this.desc = desc;
}

迫切需要幫助。

檢查http://developer.android.com/reference/android/os/Handler.htmlhttp://developer.android.com/reference/android/os/Looper.html

基本上,Realm在進行asyc查詢時需要一種與線程進行通信的方式,在Android上,自然地,Looper和Handler是可行的方式。

檢查更多示例代碼。 https://github.com/realm/realm-java/tree/master/examples/threadExample

您需要從execute回調中刪除Handler.post(...)

realm.executeTransactionAsync(new Realm.Transaction() {
                                          @Override
                                          public void execute(Realm bgRealm) {

                                              final ModelClass modelClass = bgRealm.createObject(ModelClass.class);
                                              try {
                                                  InputStream file = getAssets().open("goodie.txt");
                                                  reader = new BufferedReader(new InputStreamReader(file));
                                                  final String[] line = {reader.readLine()};
                                                  while (line[0] != null) {
                                                              try {
                                                                  line[0] = reader.readLine();
                                                              } catch (IOException e) {
                                                                  e.printStackTrace();
                                                              }
                                                              String[] namelist = line[0].split(":");
                                                              String iWord = namelist[0];
                                                              String iDesc = namelist[1];
                                                              modelClass.setName(iWord);
                                                              modelClass.setDesc(iDesc);
                                                              count++;

                                                  }
                                              } catch (IOException e) {
                                                  e.printStackTrace();
                                              } finally {
                                                  if (realm != null)
                                                      realm.close();
                                              }
                                          }

                                      }, new Realm.Transaction.OnSuccess() {
                                          @Override
                                          public void onSuccess() {
                                              Toast.makeText(MainActivity.this, "Added " + count + "items", Toast.LENGTH_SHORT).show();
                                          }
                                      }, new Realm.Transaction.OnError() {

                                          @Override
                                          public void onError(Throwable error) {


                                          }
                                      }
        );
    } catch (Exception e) {
        e.printStackTrace();
    }

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM