Ошибка отправки по Android - PullRequest
       17

Ошибка отправки по Android

0 голосов
/ 13 октября 2011

У меня проблема с Android-парцеллой.

Я получаю это исключение:

01-04 03:21:00.318: ERROR/AndroidRuntime(18973): FATAL EXCEPTION: main
  java.lang.RuntimeException: Parcel android.os.Parcel@48302ba8: 
      Unmarshalling unknown type code 6881383 at offset 244

  at android.os.Parcel.readValue(Parcel.java:1851)
  at android.os.Parcel.readListInternal(Parcel.java:2030)
  at android.os.Parcel.readArrayList(Parcel.java:1474)
  at android.os.Parcel.readValue(Parcel.java:1805)
  at android.os.Parcel.readMapInternal(Parcel.java:2021)
  at android.os.Bundle.unparcel(Bundle.java:208)
  at android.os.Bundle.getParcelableArrayList(Bundle.java:1144)

У меня есть следующие классы:

Cities.java

package project.login;

import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.overlay.OverlayItem;

import android.os.Parcel;
import android.os.Parcelable;

public class Cities extends OverlayItem implements Parcelable{
    private String cityName ;
    private String cityTime;
    private String countryName;
    private String day;
    private String timeZone;
    private float latitude ;
    private float longitude ;


    public Cities(String cityName, String cityTime, String countryName, String day, String timeZone, float latitude, float longitude) {
        super(cityName, countryName, new GeoPoint(latitude, longitude));
        this.cityName = cityName;
        this.cityTime = cityTime;
        this.countryName = countryName;
        this.day = day;
        this.timeZone = timeZone;
        this.latitude = latitude;
        this.longitude = longitude;
    }

    public Cities(String cityName, String cityTime, String countryName, String day, String timeZone, float latitude, float longitude, Parcel parcel) {
        super(cityName, countryName, new GeoPoint(latitude, longitude));

        this.cityName = parcel.readString();
        this.cityTime = parcel.readString();
        this.countryName = parcel.readString();
        this.day = parcel.readString();
        this.timeZone = parcel.readString();
        this.latitude = parcel.readFloat() ;
        this.longitude = parcel.readFloat() ;
    }

    @Override
    public int describeContents() {
        return this.hashCode() ;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(cityName) ;
        dest.writeString(cityTime) ;
        dest.writeString(countryName) ;
        dest.writeString(day) ;
        dest.writeString(timeZone) ;
        dest.writeFloat(latitude) ;
        dest.writeFloat(longitude) ;
    }

    public static final Parcelable.Creator<Cities> CREATOR = new Parcelable.Creator<Cities>() {
        public Cities createFromParcel(Parcel in) {
            return new Cities(in.readString(), in.readString(), in.readString(), in.readString(),  in.readString(), in.readFloat(), in.readFloat(), in);
        }

        public Cities[] newArray(int size) {
            return new Cities[size];
        }
    };  

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public String getCityTime() {
        return cityTime;
    }

    public void setCityTime(String cityTime) {
        this.cityTime = cityTime;
    }

    public String getCountryName() {
        return countryName;
    }

    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }

    public String getDay() {
        return day;
    }

    public void setDay(String day) {
        this.day = day;
    }

    public String getTimeZone() {
        return timeZone;
    }

    public void setTimeZone(String timeZone) {
        this.timeZone = timeZone;
    }

    public float getLatitude() {
        return latitude;
    }

    public void setLatitude(float latitude) {
        this.latitude = latitude;
    }

    public float getLongitude() {
        return longitude;
    }

    public void setLongitude(float longitude) {
        this.longitude = longitude;
    }
}

Я добиваюсь намерения от деятельности:

final List<Cities> cityList = new ArrayList<Cities>();

cityList.add(new Cities(
  "TOKYO", "7:15 AM", "Japan", "Today", "UTC + 9:30", 10.2f , 11.2f)) ;

cityList.add(new Cities(
  "NEW DELHI", "4:00 PM", "India", "Today", "UTC + 5:30", 111.0f, 123.0f)) ;

cityList.add(new Cities(
  "NEW YORK", "4:00 AM", "Usa", "Today", "UTC - 5:30", 23.4f, 77.5f)) ;

Intent intent = new Intent(mContext, LoginSubActivity.class) ;
Bundle bundle = new Bundle() ;

ArrayList<Cities> listOfCities = new ArrayList<Cities>() ;
listOfCities.addAll(cityList) ;
bundle.putParcelableArrayList("cities", listOfCities) ;
intent.putExtras(bundle) ;
startActivity(intent) ;

И получить его в другой деятельности:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    Bundle bundle = intent.getExtras() ;

    //THE EXCEPTION IS THROWN HERE:
    ArrayList<Cities> cityList = bundle.getParcelableArrayList("cities") ;
    final ArrayList<OverlayItem> overlayItemList = new ArrayList<OverlayItem>() ;
}

Что вызывает это исключение?

1 Ответ

1 голос
/ 13 октября 2011

Ваш код в итоге вызывает readString и readFloat в два раза больше, чем необходимо. После того, как вы прочитали данные в методе createFromParcel, а затем снова в конструкторе. Вы можете устранить один из двух.

...