gpt4 book ai didi

从不正确的线程访问 Java android Realm

转载 作者:行者123 更新时间:2023-11-29 19:22:28 25 4
gpt4 key购买 nike

嗨,我接下来要在 onCreate() 上创建一个 Realm,我想公开 class CheckerThread extends AsyncTask<Void, String, Boolean>在 doInBackground 存储一个日期,但我有一个

java.lang.IllegalStateException:来自错误线程的 Realm 访问。 Realm 对象只能在创建它们的线程上访问。

onCreate 我有这个:

realm = RealmController.with(this).getRealm();

接下来在 AsynTask 中,我下载了一个数据,我想保存它,我想在 doInBackground 中执行此操作,但是当我执行此操作时,我有:

Caused by: java.lang.IllegalStateException: Realm access from incorrect thread. Realm instance can only be closed on the thread it was created.

我在 doInBackground 上做了这个,但它没有帮助:

try {
realm = RealmController.with(getApplication()).getRealm();
RealmController.with(getApplication()).save(data);
}
finally {
realm.close();
}

一个 Realm Controller ;

public class RealmController {

private static RealmController instance;
private final Realm realm;

public RealmController(Application application) {
realm = Realm.getDefaultInstance();
}

public static RealmController with(Fragment fragment) {

if (instance == null) {
instance = new RealmController(fragment.getActivity().getApplication());
}
return instance;
}

public static RealmController with(Activity activity) {

if (instance == null) {
instance = new RealmController(activity.getApplication());
}
return instance;
}

public static RealmController with(Application application) {

if (instance == null) {
instance = new RealmController(application);
}
return instance;
}

public static RealmController getInstance() {

return instance;
}

public Realm getRealm() {

return realm;
}

//Refresh the realm istance
public void refresh() {

realm.refresh();
}

最佳答案

如前所述here ,不要访问在后台线程上运行的 doInBackground() 内的 UI 线程上查询的托管 RealmObjects。在 doInBackground() 中使用 try-finally 打开和关闭 Realm 实例,并根据其主键重新查询您的对象。

此外,扔掉那个 RealmController,它是基于写得不好的 Ravi Tamada infohive Realm 教程的毫无意义的添加,它告诉你使用 Realm 0.82.2,尽管该版本已有 2 年历史.它完全无视 Realm 实例是线程受限的事实,您将遇到 IllegalStateException,就像您现在所做的那样。 Ravi Tamada 侥幸逃脱,因为他在 UI 线程上执行所有写入事务,这通常是个坏主意。

让我用粗体大写声明,INFOHIVE REALM 教程很糟糕,并且助长不良做法。请勿使用。

你应该引用this repository获取正确的 Realm 教程。但你也可以查看 my profile获取额外的 Realm 相关资源。

关于从不正确的线程访问 Java android Realm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42138804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com