我正在将程序移植到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不是用于共享数据,它实际上包含业务逻辑。
答案 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。您在该链接中有一个示例。