我正在開發簡單的旅行社android應用程序。當應用程序啓動時會加載城市列表,在下一個活動中,用戶將看到源代碼和目標代碼,當用戶選擇適當的源代碼和目標代碼後,它將執行第三個活動,如果用戶選擇了第四個活動哪個用戶選擇座位並繼續訂票。爲了保持完整的用戶會話我維持UserSession類,它是如下(除去在代碼不必要的邏輯是不相關的問題)Android用戶對象parcelable問題
public class UserSession implements Parcelable {
List<City> citiesList;
HashMap<String, City> cityMap; // Map city name to code
RouteSearchResult searchedRoutes;
String sourceCity;
String destinationCity;
LocalStop selectedBoardingPoint;
LocalStop selectedArrivalPoint;
@Override
public void writeToParcel(Parcel parcel, int flags) {
try {
parcel.writeList(citiesList);
parcel.writeMap(cityMap);
parcel.writeValue(searchedRoutes);
parcel.writeString(sourceCity);
parcel.writeString(destinationCity);
parcel.writeValue(selectedBoardingPoint);
parcel.writeValue(selectedArrivalPoint);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class City implements Parcelable {
String cityName;
String cityId;
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(cityName);
parcel.writeString(cityId);
}
}
public class RouteSearchResult {
City source;
City destination;
String date;
List<RouteDetails> routeDetails;
}
我有以下問題 1)我正在運行在寫
W/System.err( 817): java.lang.RuntimeException: Parcel: unable to marshal value [email protected]
W/System.err( 817): at android.os.Parcel.writeValue(Parcel.java:1132)
W/System.err( 817): at android.os.Parcel.writeList(Parcel.java:519)
W/System.err( 817): at com.travelagent.UserSession.writeToParcel(UserSession.java:201)
W/System.err( 817): at android.os.Parcel.writeParcelable(Parcel.java:1151)
2)我評論parcel.writeList(citiesList);
語句來看看,如果我得到任何更多的問題時例外,我得到了類似的問題,parcel.writeValue(searchedRoutes);
我有以下questio ns, 1)如何將自定義對象列表爲parcelable? 2)是否需要製作像City
這樣的自定義類也是可以分類的,這是要分類的實際類的一部分。 3)有沒有解決這類問題的方法,如將用戶會話傳遞給所有活動。
請幫忙,我搜索了,但我找不到合適的解決方案,使自定義類可parcelable。
謝謝。我可以解決解組問題。錯誤的是,在讀取的包裹函數中,我沒有爲List和Map類型創建對象,我必須創建。這解決了這個問題。使用parcelable/bundle方法,如果我們有一個100個自定義對象的列表,那麼寫入捆綁/包裹和從捆綁包/宗地中讀取將花費很高。所以爲了避免這個問題,我將UserSession的元素設爲靜態,這可以避免額外的副本,但我不知道這種方法會受到懲罰。 – Srinivas
我不認爲有這樣做的其他乾淨的方式。基本上保持數據在靜態中傳遞與編組類似,並使您可以完全控制其狀態。 – blacharnia