【发布时间】:2011-10-20 20:19:10
【问题描述】:
我正在开发简单的旅行社安卓应用程序。当应用程序启动时,它会加载城市列表,在下一个活动中,用户将看到源和目的地微调器,一旦用户选择了正确的源和目的地,它将进入第三个活动,如果用户选择一个,它会显示可用的旅行,它需要到第四个活动哪个用户选择座位并继续订票。为了维护完整的用户会话,我维护了一个 UserSession 类,如下(删除代码中与问题无关的不必要的逻辑)
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 com.travelagent.City@40605878
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); 类似的问题
我有以下问题,
1) 如何将自定义对象列表设为可打包?
2) 是否必须让City 等自定义类也可打包,这是要打包的实际类的一部分。
3) 是否有任何方法可以解决此类问题,例如将用户会话传递给所有活动。
请帮忙,我搜索了,但我找不到合适的解决方案来使自定义类可打包。
【问题讨论】:
标签: android