2010-09-05 43 views
5

我試圖通過一個Intent對象將一個Address對象數組傳遞給另一個Activity。如何將一個Address對象數組傳遞給另一個Acitvity

由於Address類實現了Parcelable接口,我嘗試執行以下操作。我從Geocoder對象中獲得了一個List Address對象,我將其轉換爲一個Address對象數組。然後我將這個數組放入Intent中並調用活動。

final Address[] addresses = addresseList.toArray(new Address[addresseList.size()]); 

final Intent intent = new Intent(this, SelectAddress.class); 
intent.putExtra(SelectAddress.INTENT_EXTRA_ADDRESSES, startAddresses); 

startActivityForResult(intent, REQUEST_CODE_ACTIVITY_SELECT_ADDRESSES); 

在另一個活動中,我嘗試從以下代碼片段的Intent中檢索Address []。但最後一行的調用以ClassCastException Landroid.os.Parcelable結束。

Bundle bundle = getIntent().getExtras();    
Address[] addresses = (Address[]) bundle.getParcelableArray(INTENT_EXTRA_ADDRESSES); 

我在做什麼錯?我該如何檢索地址[]。

+0

「嗨,我想通過一個Intent對象傳遞地址對象到另一個活動的數組。」 - 爲什麼?對我而言,在活動之間傳遞複雜對象是一種代碼味道。將'Intent' extras想象成URL上的GET參數。如果這些是兩個Web頁面,您是否會在鏈接中的URL上傳遞一堆'Address'對象作爲GET參數?假設傳遞一個'Address'對象數組是不可避免的,那麼返回的對象類型是什麼? 'ClassCastException'行應該告訴你。 – CommonsWare 2010-09-05 19:34:47

+0

ClassCastException提到的類型是Landroid.os.Parcelable。 – Flo 2010-09-05 19:50:26

+0

關於您將複雜對象數組傳遞給活動的問題。當第一個活動中的地址搜索返回了多個結果時,我想要做的是爲用戶提供第二個活動,他可以從地址列表中進行選擇。你如何實現這一點,而不需要將地址傳遞給第二個活動,以便在微調器中顯示它們,因此用戶可以選擇其中的一個? – Flo 2010-09-05 20:02:33

回答

13

問題是鑄件。嘗試:

Bundle bundle = getIntent().getExtras(); 
Parcelable[] parcels = bundle.getParcelableArray(INTENT_EXTRA_ADDRESSES); 

Address[] addresses = new Address[parcels.length]; 
for (Parcelable par : parcels){ 
    addresses.add((Address) par);    
} 
+7

答案是正確的,但是從什麼時候你可以使用「.add」添加到數組?大聲笑 使用此:**'for(int i = 0; i Shehaaz 2013-03-29 02:51:47

0

@LiorZanswer是完全真實的。我只是將他的答案和this other合併在這個方便的功能中。

@SuppressWarnings("unchecked") 
private static <T extends Parcelable> T[] castParcelableArray(Class<T> clazz, Parcelable[] parcelableArray) { 
    final int length = parcelableArray.length; 
    final T[] array = (T[]) Array.newInstance(clazz, length); 
    for (int i = 0; i < length; i++) { 
     array[i] = (T) parcelableArray[i]; 
    } 
    return array; 
} 
4
 
or on java1.6: 
    Parcelable[] x = bundle.getParcelableArray(KEY); 
    addresses = Arrays.copyOf(x, x.length, Address[].class); 
+3

歡迎來到StackOverflow!儘管你已經提供了答案,但最好稍微澄清一下你的解決方案提供了什麼,以及它如何幫助OP解決他們的問題。 – 2014-06-17 02:02:58

+0

它有助於您不需要編寫循環的方式。一條線代替。 – Malachiasz 2015-02-25 09:01:54

相關問題