0

我正在将一个程序移植到 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

4 回答 4

6

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

于 2011-03-11T11:37:46.180 回答
2

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

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

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

于 2011-03-11T11:30:52.887 回答
2
main = (Activity1) findViewById((R.id.Activity1);

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

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

于 2011-03-11T11:35:34.830 回答
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。您在该链接中有一个示例。

于 2011-03-11T11:43:29.767 回答