【发布时间】:2017-03-22 09:29:00
【问题描述】:
java.lang.IllegalStateException: 你的领域是从一个线程打开的 如果没有 Looper 并且您提供了回调,我们需要一个 Handler 来 调用你的回调
我正在编写一个将在后台执行的代码 - 从文本文件(内部资产)读取,然后将它们放入领域数据库中。但我似乎得到了这个错误
"java.lang.IllegalStateException: 你的领域是从一个没有 Looper 的线程打开的并且你提供了一个回调,我们需要一个处理程序来调用你的 回调"
在我的 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 的模型类有这个
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;
}
急需帮助。提前致谢
【问题讨论】:
-
欢迎来到 StackOverflow!请遵循用户指南 (stackoverflow.com/help/how-to-ask) 谢谢
标签: java android multithreading android-asynctask