2011-12-31 262 views
4

我有兩個活動,NewTransferMyOwn.java和FromAccount.java如何將對象傳遞給活動?

當我從NewTransferMyOwn.java去FromAccount.java,我寫的代碼如下

Intent i = new Intent(NewTransferMyOwn.this, FromAccount.class); 
startActivityForResult(i, FROM_ACCOUNT); 

當我從FromAccount回來的.java到NewT​​ransferMyOwn.java,然後我想通過類聲明完整的對象

我寫代碼

Statement st = ItemArray.get(arg2);//ItemArray is ArrayList<Statement>, arg2 is int 
Intent intent = new Intent(FromAccount.this,NewTransferMyOwn.class).putExtra("myCustomerObj",st); 

我得到錯誤如下的putExtra,

更改爲「getIntExtra」

像我一樣,有再鑄ST爲int,有什麼問題在這裏,我怎麼能傳遞聲明反對活動的對象?

+1

[你應該做一些搜索(http://www.google.com.pk/search?q=android+passing+my+object+to+another+activity) – 2011-12-31 07:47:30

+0

我認爲有是你和谷歌之間的東西:-P @AdilSoomro,謝謝我的確,但是現在他親愛的時間了kar – 2011-12-31 07:56:40

回答

7

您還可以通過Serializable實現自定義類,並通過自定義對象,

public class MyCustomClass implements Serializable 
{ 
    // getter and setters 
} 

再經過與意向的自定義對象。

​​

要檢索對象

Custom custom = (Custom) data.getSerializableExtra("myobj"); 

UPDATE:

通過您的自定義對象到以前的活動,而你正在使用startActivityForResult

Intent data = new Intent(); 
Custom value = new Custom(); 
value.setName("StackOverflow"); 
data.putExtra("myobj", value); 
setResult(Activity.RESULT_OK, data); 
finish(); 

要檢索Previ上的自定義對象OU的活動

if(requestCode == MyRequestCode){ 
    if(resultCode == Activity.RESULT_OK){ 
     Custom custom = (Custom) data.getSerializableExtra("myobj"); 
     Log.d("My data", custom.getName()) ; 
     finish(); 
    } 
} 
+0

我不能這樣做,因爲: 「方法putExtra(String,Parcelable)對於前一個Activity中的類型Intent」 – 2013-11-27 13:54:14

+0

不明確,結果將從Bundle中提取,因此它將是newBundle()。 .getExtras()。getSerializeable(「key」)'? – dakait 2013-12-13 07:48:38

2

您不能在活動之間傳遞任意對象。您可以作爲extras/bundle中傳遞的唯一數據是基本類型或Parcelable對象。

和Parcelables基本上是可以序列化/反序列化到/從一個字符串的對象。

您也可以考慮僅傳遞引用該內容的URI並在其他活動中重新獲取它。

+1

包裹不會被序列化爲字符串。它們是可以通過Binder IPC傳遞的特殊對象。基本上你要在進程之間傳遞的對象應該實現Parcelable接口,並且應該由基本類型組成。 – Yury 2011-12-31 07:48:59

相關問題