2013-02-14 53 views
0

我的項目中有兩個活動類,第三個類是Thread的子類。在活動之間發送對象

Thread類執行Bluetooth Socket這不是Parcelable

First Activity啓動Second Activity使用startActivityforResult()

Second Activity創建Thread類的一個對象,並啓動該線程。

我需要將線程對象的對象引用從Second Activity傳遞到First Activity's onActivityResult(),以便我可以從第一個活動訪問Thread對象。

我該如何做到這一點?

+0

人們應該不停地在活動中思考。他們是用戶界面,你也可以在其他地方工作。 – 2013-02-14 16:06:40

+1

你爲什麼要這麼做?在活動之間傳遞數據是使用序列化完成的,因此您可以讓您的Thread子類實現Serializable或Parcelable,並使用返回意圖將其傳回。 – 2013-02-14 16:06:57

+0

您只能在活動之間傳遞基本類型(旁邊的Parcelable),爲什麼不在onActivityResult()之後的第一個Activity中啓動您的Thread? – 2013-02-14 16:08:00

回答

2

您有幾種選擇。

您可以您的對象分解成簡單的數據類型,並把這些值作爲您傳遞回來setResult()意圖羣衆演員,不這麼做的話,會使用intent.putExtra(key, value)

或者你可以讓你的數據對象實現Parcelable接口,以便您可以將數據對象直接添加到意圖。

的代碼做後者會是這個樣子

Intent resultIntent = new Intent(); 
resultIntent.putExtra("resultObject", mObj); 
setResult(ACTION_OK, resultIntent); 

然後裏面你的onActivityResult可以拉出來是這樣的:

data.getParcelableExtra("resultObject"); 

對於後者的方法來工作,你需要正確地使用你的數據對象實現parcelable。然而,前一種方法並不要求這樣做,因爲只會傳回簡單的值。然後,您必須採取這些簡單的值,並在另一側「重新膨脹」數據對象。

+0

我想要包裹的對象包含藍牙socket既不可兼容也不可串行化。你認爲我能做什麼? – tez 2013-02-15 06:35:26

+1

然後你不應該試圖在兩個這樣的活動之間傳遞它。可能有更好的方法來完成你需要做的事情。也許擴展Application類並讓它存儲你的套接字,或者使用一個你可以綁定到兩個活動的服務。或者,也許將第二項活動變成第一項活動的「另一個屏幕」,而不是完全獨立的活動。 – FoamyGuy 2013-02-15 14:23:11