android:如何在活动之间共享POJO

时间:2011-03-11 11:23:33

标签: android reference android-activity share pojo

我正在将程序移植到Android。我在POJO上拥有所有业务逻辑,因此我需要将活动仅用作前端。

问题是我不知道如何在活动之间共享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不是用于共享数据,它实际上包含业务逻辑。

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

main = (Activity1) findViewById((R.id.Activity1);

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

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

答案 3 :(得分:1)

我发现你混合了两件不同的东西: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。您在该链接中有一个示例。