나는 간단한 여행사 안드로이드 응용 프로그램을 개발하고 있습니다. 응용 프로그램이 시작되면 다음 도시 활동 목록에서 도시 목록을로드합니다. 사용자는 소스 및 대상 스피너를 볼 수 있습니다. 사용자가 적절한 소스 및 대상을 선택하면 세 번째 활동으로 이동하고 사용자가 네 번째 활동을 선택하면 사용 가능한 여행을 표시합니다. 어떤 사용자가 좌석을 선택하고 티켓을 계속 예약합니다. 완전한 사용자 세션을 유지하기 위해 나는 다음과 같이안드로이드 사용자 객체 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) 나는 실행을 얻고있다 (문제에 관련이 코드에서 불필요한 로직을 제거)하는 사용자 세션 클래스를 유지하고있다 시간 예외 내가 더 이상 문제를 얻을 수 있는지 확인하기 위해 parcel.writeList(citiesList);
문을 주석)
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를 쓰는 동안, 나는 questio을 다음 한 parcel.writeValue(searchedRoutes);
와 비슷한 문제를 가지고 ns, 1) 커스텀 오브젝트 목록을 분할 가능하게 만드는 방법은 무엇입니까? 2) City
과 같은 사용자 지정 클래스도 필링 할 수 있어야하며,이 클래스는 실제 클래스의 일부입니다. 3) 모든 활동에 사용자 세션을 전달하는 것과 같은 문제를 해결할 수있는 방법이 있습니까?
도와주세요. 검색해 보았지만 사용자 지정 클래스를 구분할 수있는 적절한 솔루션을 찾을 수 없습니다.
감사합니다. 나는 비 정렬 화 문제를 풀 수 있었다. 실수는 읽기 소포 함수에서 List 및 Map 유형의 객체를 만들지 않아 작성해야합니다. 이 문제가 해결되었습니다. parcelable/bundle 방식을 사용하면 100 개의 사용자 정의 객체 목록이 있으면 번들/소포에 쓰고 번들/소포에서 읽는 데 많은 비용이 듭니다. 그래서이 문제를 피하기 위해 UserSession의 요소를 정적으로 만들었습니다. 이것은 추가 사본을 피할 수는 있지만이 접근법의 페널티는 알지 못합니다. – Srinivas
나는 이것을하는 다른 깨끗한 방법이 없다고 생각합니다. 기본적으로 통계에서 전달할 데이터를 유지하는 것은 마샬링과 유사하며 상태를 완전히 제어 할 수 있습니다. – blacharnia