2011-03-11 81 views
0

我正在将程序移植到Android。我拥有所有关于POJO的商业逻辑,所以我需要将Activities作为一个单纯的前端。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

http://stackoverflow.com/questions/2965109/passing-data-between-activities-in-android – Chris 2011-03-11 11:35:50

+0

重复不是真的重复,它不是关于共享数据,它关于跨多个活动访问数据/逻辑.. – WarrenFaith 2011-03-11 11:37:38

+0

我不同意。上面的答案不适用于POJO,仅适用于数据。 – michelemarcon 2011-03-11 11:39:16

回答

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

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

如果您的业务逻辑可能是单身人士,我会推荐这样做。它应该是最简单的方法。

+1

请阅读最后两句。如果你可以让他们成为一个单身人士,就使用它。否则,我建议扩展应用程序类并在那里保存对你的POJO的引用,这样你就可以从任何地方访问它们...... – WarrenFaith 2011-03-11 11:42:15

2

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

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

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

6

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

+1

他们不需要实现Parceable ......你可以使用putExtra和getExtra这很多次没有任何问题。 – Chris 2011-03-11 13:51:03

+1

这将适用于基本的Java数据类型,如int,long,double等。对于您自己的数据类型,您必须实现Parcelable或Serializable。 – Abhinav 2011-03-11 13:59:08

+0

哦,我很抱歉,你是对的,我只是认识到,我所有的解析对象是Serializables :-)。直到现在我还没有看到这是一个要求。感谢照亮+1 * gg * – Chris 2011-03-11 14:08:51

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。您在该链接中有一个示例。

+0

我需要在活动之间进行双向沟通,对于很多变量,这会变得麻烦...... Binder是一个更好的选择。 – michelemarcon 2011-03-11 14:02:24