gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:52:52 26 4
gpt4 key购买 nike

所以在 IntentService 内,应用程序可能处于 Activity 状态或处于非 Activity 状态,onHandleIntent被调用,我把它放在下面的代码中。这是我将数据存储到 Realm 的地方。

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

for (AppItem item : items) {
AppItem item2 = realm.createObject(AppItem.class, UUID.randomUUID().toString());
item2.mName = item.mName;
item2.mCount = item.mCount;
item2.mUsageTime = item.mUsageTime;
}
}
});
} finally {
if (realm != null) {
realm.close();
}
}

然后我尝试在 onPostExecute 中访问它在 AsyncTask , 在 doInBackground , 我得到 RealmResults<AppItem> ,然后将其存储到 List <AppItem>并将其发送至onPostExecute放置此代码的位置。 appItems这里是 ReamObject

 Realm backgroundRealm = Realm.getDefaultInstance();
backgroundRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
for (AppItem item : appItems) {
//getting error here if (item.mUsageTime <= 0) continue;
mTotal += item.mUsageTime;
item.mCanOpen = mPackageManager.getLaunchIntentForPackage(item.mPackageName) != null;


}
}
});

我都使用 executeTransactionAsync 完成了,我仍然收到以下错误。

java.lang.IllegalStateException: Realm access from incorrect thread. Realm objects can only be accessed on the thread they were created.

最佳答案

根据错误消息:一旦您在 1 个线程上获得任何 Realm 对象,就只能在该线程上访问它们。对其他线程的任何访问都会引发该异常。

来自 AsyncTask 的“doInBackground”在后台线程上运行。 “onPostExecute”在 UI 线程上运行。所以在这里你在后台线程上获取 Realm 对象,并尝试在 UI 线程上访问它们 => 异常。

您应该在后台线程上做所有事情,或者在 UI 线程上做所有事情。

如果您正在执行非常复杂的查询,我建议在 RealmQuery 上使用“findAllAsync”,因为这将在后台线程上运行查询,并将它们移动到主线程,但它由 Realm 在内部处理一种安全的方式。

关于Android:来自错误线程的 Realm 访问。 Realm 对象只能在创建它们的线程上访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50573802/

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