0

I already tried adding this

-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}

to my proguard-rules.pro file as suggested by: Proguard causing RuntimeException (Unmarshalling unknown type code) in Parcelable class

Here is my class that implements parcelable, is there any issues that may cause this error? Am I handling the implementation correctly?

I only get the error and the subsequent force close after the app has been running for an extended period of time and has been killed by the OS (however I don't get the error if I swipe away in multitasking window).

public class WeatherData implements Parcelable{

public Condition condition = new Condition();
public Forecast forecast = new Forecast();
public Location location = new Location();

public WeatherData() {
    //empty
}

public static class Condition {
    public static String currentDescription;
    public static String date;
    public static int currentTemp;
}

public static class Forecast {
    public static List<Integer> tempMin = new ArrayList<>();
    public static List<Integer> tempMax = new ArrayList<>();
    public static List<String> description = new ArrayList<>();
    public static List<Integer> windSpeed = new ArrayList<>();
    public static List<String> dayOfWeek = new ArrayList<>();
    public static List<String> imageURL = new ArrayList<>();
}

public static class Location {
    public static String name;
}

public WeatherData(Parcel in) {
    //empty
}

public static final Creator<WeatherData> CREATOR = new Creator<WeatherData>() {
    @Override
    public WeatherData createFromParcel(Parcel in) {
        return new WeatherData(in);
    }

    @Override
    public WeatherData[] newArray(int size) {
        return new WeatherData[size];
    }
};

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i) {
    //location
    parcel.writeString(Location.name);
    //condition
    parcel.writeString(Condition.currentDescription);
    parcel.writeString(Condition.date);
    parcel.writeInt(Condition.currentTemp);
    //forecast
    parcel.writeList(Forecast.tempMin);
    parcel.writeList(Forecast.tempMax);
    parcel.writeList(Forecast.description);
    parcel.writeList(Forecast.windSpeed);
    parcel.writeList(Forecast.dayOfWeek);
    parcel.writeList(Forecast.imageURL);
}

EDIT:

Here is the stacktrace

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                   Process: com.murraystudio.weatherapp, PID: 14219
                                                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.murraystudio.weatherapp/com.murraystudio.weatherapp.MainActivity}: java.lang.NullPointerException: Attempt to read from field 'com.murraystudio.weatherapp.datamodels.WeatherData$Condition com.murraystudio.weatherapp.datamodels.WeatherData.condition' on a null object reference
                                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
                                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                                                       at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                                                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                       at android.os.Looper.loop(Looper.java:154)
                                                                                       at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                                    Caused by: java.lang.NullPointerException: Attempt to read from field 'com.murraystudio.weatherapp.datamodels.WeatherData$Condition com.murraystudio.weatherapp.datamodels.WeatherData.condition' on a null object reference
                                                                                       at com.murraystudio.weatherapp.WeatherFragment.updateWeatherUI(WeatherFragment.java:230)
                                                                                       at com.murraystudio.weatherapp.WeatherFragment.onCreateView(WeatherFragment.java:124)
                                                                                       at android.app.Fragment.performCreateView(Fragment.java:2353)
                                                                                       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:995)
                                                                                       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1171)
                                                                                       at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1153)
                                                                                       at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2039)
                                                                                       at android.app.FragmentController.dispatchActivityCreated(FragmentController.java:176)
                                                                                       at android.app.Activity.performCreateCommon(Activity.java:6673)
                                                                                       at android.app.Activity.performCreate(Activity.java:6681)
                                                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                                                                                       at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                                                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                       at android.os.Looper.loop(Looper.java:154) 
                                                                                       at android.app.ActivityThread.main(ActivityThread.java:6119) 
                                                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Community
  • 1
  • 1
sanic
  • 2,065
  • 4
  • 20
  • 33

2 Answers2

1

You can not parcel static variables. Convert the variables to be parcel into non static variable.

Ishan
  • 1,172
  • 10
  • 25
0

When using Parcelable or Serializable, your Pojo Class (i.e. WeatherData), your class from where you are sending the parcel and the class where you are receiving the parcel, all should extend Parcelable or Serializable.

halfer
  • 19,824
  • 17
  • 99
  • 186
Androidss
  • 47
  • 11