2015-10-05 22 views
1

我正在使用對的數組列表,並試圖通過它來顯示錯誤對話框。 錯誤對話框顯示了沒有任何問題,但是當網頁被暫停時,我得到下面的錯誤包裹:無法封送價值android.util.Pair

E/AndroidRuntime(23733): Process: com.comcast.xfinityhome.tps, PID: 23733 
E/AndroidRuntime(23733): java.lang.RuntimeException: Parcel: unable to marshal value [email protected] 
E/AndroidRuntime(23733): at android.os.Parcel.writeValue(Parcel.java:1337) 
E/AndroidRuntime(23733): at android.os.Parcel.writeList(Parcel.java:711) 
E/AndroidRuntime(23733): at android.os.Parcel.writeValue(Parcel.java:1284) 
E/AndroidRuntime(23733): at android.os.Parcel.writeArrayMapInternal(Parcel.java:638) 
E/AndroidRuntime(23733): at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313) 
E/AndroidRuntime(23733): at android.os.Bundle.writeToParcel(Bundle.java:1096) 
E/AndroidRuntime(23733): at android.os.Parcel.writeBundle(Parcel.java:663) 
E/AndroidRuntime(23733): at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:136) 


     ArrayList<Pair> errorData = new ArrayList<>(2); 

     errorData.add(Pair.create("Value", "123")); 
     errorData.add(Pair.create("name", "number")); 

showErrorDialog(...., errorData); 
+0

這是預期的。在期望(但不檢查)可序列化數據的地方使用不可序列化的數據。改爲嘗試一個地圖。 – zapl

+0

但它已被設置爲可串行化到它在Bundle中傳遞的片段。 NewDialogFragment fragment = new NewDialogFragment(); Bundle args = new Bundle(); args.putSerializable(ERROR_DATA,errorData); fragment.setArguments(參數); – user3722531

+0

'ArrayList'本身就是這樣,這就是爲什麼它沒有抱怨。但是沒有檢查列表中的所有元素(直到它實際嘗試序列化它們)。而http://developer.android.com/reference/android/util/Pair.html不是。應該工作的是用'Map 替換'List >' – zapl

回答

-1

使用Parcelable類擴展。閱讀本文tuto

另外,您可以前面詢問this問題。