首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自意图服务的领域同步写入

来自意图服务的领域同步写入
EN

Stack Overflow用户
提问于 2016-11-11 01:04:40
回答 1查看 495关注 0票数 0

我使用的是领域数据库、意图服务和UI,因为它是不能调用的库的一部分,也不能设置领域的默认值,所以我对每个意图都使用Realm.getInstance(配置)来检索领域,并且因为我不能重用领域而不知道我将在哪个线程上运行,所以也不能使用异步写入。

因此,每次我写一条记录时,我都会得到以下错误

“应避免将异步查询与本地写入混合使用。Realm会将所有异步查询转换为同步查询,以便保持一致。请改用异步写入。”

我猜想作者所谓的“本地写”是指“同步”?

根据我对此场景中的领域利用的理解,我不认为有任何替代方案?

从Intent Service场景中编写对象的正确方法是:

代码语言:javascript
复制
Realm realm = getNewRealmInstance();
try {
  realm.beginTransaction();
  Record newRecord = new Record().setField1(x).setField2(y);
  realm.copyToRealm(newRecord);
  realm.commitTransaction();
} catch (Throwable error) {
  realm.cancelTransaction();
} finally {
  realm.close();
}

此外,我还收到了以下日志消息(没有抛出异常)

代码语言:javascript
复制
E/REALM_JNI: jni: ThrowingException 7, std::exception in /Users/zaki/fromgit/realm/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_TableQuery.cpp line 1285, .
E/REALM_JNI: Exception has been throw: std::exception in /Users/zaki/fromgit/realm/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_TableQuery.cpp line 1285
EN

回答 1

Stack Overflow用户

发布于 2016-11-11 04:15:47

“应避免将异步查询与本地写入混合使用。Realm会将所有异步查询转换为同步查询,以便保持一致。请改用异步写入。”

只有在UI线程上执行同步写入时,才会收到此警告。当然你可以确保你不会在UI线程上编写代码?

这适用于intent服务:

代码语言:javascript
复制
 Realm realm = getNewRealmInstance();
 try {
       realm.executeTransaction(new Realm.Transaction() {
            public void execute(Realm realm) {
                Record newRecord = new Record().setField1(x).setField2(y);
                realm.insert(newRecord);
            } 
       });
 } finally {
       realm.close();
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40533242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档