当前位置: 首页 > 面试题库 >

Android Realm-从服务访问Realm对象

臧友樵
2023-03-14
问题内容

我在活动中创建了一个领域对象。我需要能够在我创建的服务中访问该对象。但是在服务中创建Realm对象时出现错误

        mRealm = Realm.getInstance(getApplicationContext());

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

现在我理解这意味着,因为领域对象是在我的活动上创建的,所以我无法从后台线程访问它。但是,除了创建自己的自定义处理程序线程外,我没有找到其他简便的方法,但这似乎是一个笨拙的方法

我是否在这里缺少某些东西,还是真的没有更好的方法可以从不同线程访问Realm对象?

更新:

我更深入地研究发现,在IntentService中,onHandleIntent方法与类中的其他方法相比在单独的线程中运行。因此,我无法创建类级别的Realm实例,并且无法与onHandleIntent方法内部和外部的实例进行交互。这就是导致线程异常的原因。除了在每种方法中创建一个单独的Realm实例之外,我还需要访问该对象并一次又一次地检索它,我认为Ilya
Tretyakov的答案是最好的。我可以在构造函数中从领域复制对象,然后在服务的整个生命周期中使用它。任何需要写回Realm对象的方法都需要在该方法中实例化自己的Realm实例。


问题答案:

您可以尝试使用realm.copyFromRealm(youRealmObject);。这些方法将Realm数据复制到普通Java对象中,并将其与Realm分离。

这是用法示例:

youRealmObject = realm.copyFromRealm(youRealmObject);

以下是来自docs的信息:

为已持久的RealmObject制作独立的内存中副本。这是一个深层副本,将复制所有引用的对象。复制的对象都已与Realm分离,因此将不再自动更新它们。这意味着复制的对象可能包含与其他托管Realm对象不再一致的数据
警告
:对复制对象的任何更改都可以使用copyToRealmOrUpdate(RealmObject)合并回Realm,但是所有字段都将被覆盖,而不仅仅是已更改的字段。这包括对其他对象的引用,并且有可能覆盖其他线程所做的更改。

https://realm.io/docs/java/latest/api/io/realm/Realm.html#copyFromRealm-E-



 类似资料:
  • 我已经构建了一些自定义封送器,我正在尝试访问消息服务。我有以下代码。 Resources.groovy 我得到以下异常 无法对空对象调用方法getMessage()。Stacktrace如下:java.lang.nullpointerException:无法在org.hri.leaverequest.marshaller.errorsmarshaller$_register_closure1_cl

  • 问题内容: 我们有一个Java Web应用程序,我们需要访问一个Web服务,它是一个https Web服务。所以我将ssl证书添加到Websphere; SSL证书和密钥管理>密钥库和证书> NodeDefaultKeyStore>签署者证书 SSL证书和密钥管理>密钥库和证书> NodeDefaultTrustStore>签署者证书 当应用程序尝试访问Web服务时,将引发如下异常: 我屏蔽了专用

  • 问题内容: 我正在制作一个打算在PC上本地运行的html页面,最好不要在本地服务器上运行(file://)。我还使用jQuery使操作/ AJAX更加容易。 我正在尝试从twitter API加载2个结果,但出现错误。代码如下: 我也尝试了以下代码,但没有改变结果。 我在chrome中(在本地服务器上)收到以下错误: 或(带有file://链接) 有谁知道我该如何解决? 问题答案: 您遇到了同源策

  • 问题内容: 我需要在本地使用数据库。我已经使用Visual Studio 2012在(LocalDB)\ v11.0 Server中创建了数据库。从例如控制台应用程序进行连接时,一切正常。但是我的应用程序是Windows Service。尝试通过以下方式连接到我的数据库输出: 有什么解决办法吗?也许我应该考虑为此设置其他数据库服务器?如果是,如何设置它使其仅在本地可见? 问题答案: 所以我自己找到

  • 问题内容: 我正在尝试从jQuery客户端访问wcf服务 具体来说,此示例 http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4 当客户端网页与服务位于同一域时,所有方法都可以正常工作 一旦我将客户端网页移到另一个域,它就会中断。无法到达服务,请求失败 所有示例(ASMX,REST和WCF)都会发生这种情况 任何想法如何使这个跨岛工

  • 我无法从外部访问我的服务。首先,这里是我的conf yaml文件: nginx-pod.yaml nginx-service.yaml metallb-config.yaml 然后我创建了集群。命令 打印: 一切正常,而且< code > ku bectl describe service/nginx-service 打印: curl命令在主服务器打印。接下来我试图从另一个网络打开,它不起作用,但