【问题标题】:Android intent creating new instance of objectAndroid意图创建对象的新实例
【发布时间】:2013-06-18 21:55:18
【问题描述】:

我使用 Intent 从 Activity A 将 Serializable 对象传递到 Activity B,但是当我在将对象放入 A 中的意图之前以及在 B 中检索它之后打印 object.toString() 方法时,我看到了它们实际上是不同的实例。

这就是问题所在。我在不同的类和不同的线程中初始化了该对象的字段,当我将对象放入 Activity A 中的意图时,这些字段还没有准备好,但是当我检索它们时它们已经准备好了。但是,当我尝试在 Activity B 中检索这些字段时,我发现它们是空的,因为检索到的对象是一个新实例。

我该如何解决这个问题?我不知道如何让主线程等到对象初始化任务结束(已经尝试过 thread.join())。我基本上只需要将两个 ArrayList 从一个活动发送到另一个活动,除非我发送它们(即将它们放入意图中)它们是空的,但是当它们被检索时它们已经被填充。​​

【问题讨论】:

  • 如果能贴一些代码就更好了。

标签: java android android-intent serializable


【解决方案1】:

当序列化一个对象时,它被转换成一种形式,以后可以用来创建原始对象的语义相同的克隆。这当然是原始对象的不同实例。

我能想到两种情况:

  • 您的活动 B 可以在没有您尝试通过 Intent 发送的信息的情况下运行。在这种情况下,活动 B 可以注册一个BroadcastReceiver,并且您的线程一旦完成,将通过LocalBroadcastManager 广播数据
  • 如果没有该数据,您的活动 B 将无法运行,而活动 A 运行生成该数据的代码,例如在AsyncTask 中,并在任务完成后启动 Activity B(这将在 onPostExecute() 方法中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多