user3314123
user3314123

Reputation: 61

Creating parcelable class

my class looks like this when I run my application and navigate throug the different fragments sometimes it crashes and logcat says that error is BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class ge.mobility.weather.entity.City

here is my code

import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList;
import java.util.List;

public class City implements Parcelable {
    private String code;
    private String name;

    private List<CityWeather> weathers ;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public List<CityWeather> getWeathers() {
        if(weathers == null) {
            weathers = new ArrayList<CityWeather>();
        }
        return weathers;
    }
    public void addCityWeather(CityWeather w) {
        getWeathers().add(w);
    }

    public void addCityWeathers(List<CityWeather> w) {
        getWeathers().addAll(w);
    }
    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {enter code here
        // TODO Auto-generated method stub`enter code here`

    }
}

Upvotes: 0

Views: 183

Answers (2)

Chathura Wijesinghe
Chathura Wijesinghe

Reputation: 3349

Try this code generation library Parceler , if you are use InteliJ Use this plugin IntelliJ Plugin for Android Parcelable boilerplate code generation

Upvotes: 0

jabaldonedo
jabaldonedo

Reputation: 26572

You need to implement the Parcelable.Creator and also add the un/serialise methods and a constructor:

public City(Parcel in) {
    readFromParcel(in);
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(code);
    dest.writeString(name);
    dest.writeTypedList(weathers);
}

private void readFromParcel(Parcel in) {
    code = in.readString();
    name = in.readString();
    in.readTypedList(weathers, CityWeather.CREATOR);
}

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

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

You will also need to implement the Parcelable methods for the CityWeather class.

Upvotes: 1

Related Questions