2011-03-11 61 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

相關問題