【问题标题】:android: How to share a POJO between Activitiesandroid:如何在活动之间共享 POJO
【发布时间】:2011-07-13 10:30:15
【问题描述】:

我正在将一个程序移植到 Android。我的所有业务逻辑都在 POJO 上,所以我需要将活动用作纯粹的前端。

问题是我不知道如何在Activity之间共享POJO;这个我试过了,还是不行:

class Activity1 extends Activity{
Logic logic=new Logic();

public Logic getLogic(){
return logic
}
}

class Activity2 extends Activity{
Logic logic;
public void onCreate(Bundle savedInstanceState) {
    main = (Activity1) findViewById((R.id.Activity1);
    logic= main.getLogic(); 
}
}

请注意,POJO 不是为了共享数据,它实际上包含业务逻辑。

【问题讨论】:

  • 不是真正的重复,它不是关于共享数据,而是关于跨多个活动访问数据/逻辑......
  • 我不同意。上面的答案不适用于 POJO,仅适用于数据。

标签: android reference android-activity share pojo


【解决方案1】:

如果您通过发出Intent 从一个活动开始另一个活动,您可以使用putExtra() 方法传递POJO。在收到 Intent 的新活动中,您可以使用 getXXXExtra() 取回 POJO,其中 XXX 是 POJO 类型。

您还应该查看http://developer.android.com/guide/topics/intents/intents-filters.html,以更好地了解 Intent 是什么以及它们如何与活动一起工作。

编辑:如此处其他答案所述,您必须实现 Parceable 或 Serializable 接口。

【讨论】:

    【解决方案2】:
    main = (Activity1) findViewById((R.id.Activity1);
    

    findViewById 仅适用于视图!它并不意味着用于活动,因为活动更像是“屏幕”而不是视图本身。

    如果您的业务逻辑可以是单例,那么我建议您这样做。这应该是最简单的方法。

    【讨论】:

    • 请阅读最后两句。如果您可以使它们成为单例,请使用它。否则,我建议扩展 Application 类并在那里保留对您的 POJO 的引用,以便您可以从任何地方访问它们...
    【解决方案3】:

    您的 POJO 需要实现 Parcelable 接口。然后,您可以使用 putExtra 将它们放入 Intent 中,并使用 getParcelableExtra 在下一个活动中检索它们。 http://developer.android.com/reference/android/os/Parcelable.html

    【讨论】:

    • 他们根本不需要实现 Parceable ......你可以使用 putExtra 和 getExtra 我做了很多次没有任何问题。
    • 这适用于基本的 Java 数据类型,如 int、long、double 等。对于您自己的数据类型,您必须实现 Parcelable 或 Serializable。
    • 哦,对不起,你是对的,我刚刚认识到我所有的解析对象都是可序列化的 :-)。直到现在我才看到这是一个要求。感谢您的启发 +1 gg
    • 我自己一时糊涂了。必须通过文档才能检查。 :)
    【解决方案4】:

    我看到你混合了两种不同的东西:findViewById 会给你一个View,而不是你尝试做的Activity

    如果您的逻辑不必保持活动之间的状态,您可以简单地在两个活动中创建一个新对象

    Logic logic=new Logic();
    

    如果你想保持状态,假设它是POJO,你可以在“调用”第二个活动时通过意图发送数据

    intent.putExtra("MyInt", 123);
    intent.putExtra("MyString", "hello!");
    //...
    

    然后在第二个活动中

    intent.getIntExtra("MyInt"); // 123
    intent.getStringExtra("MyString"); //"hello!"
    

    另一种选择是实现 parcelable 。您在该链接中有一个示例。

    【讨论】:

    • 我需要在活动之间进行双向通信,对于很多变量,这会变得很麻烦...... Binder 是一个更好的选择。
    猜你喜欢
    • 2016-02-14
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多