0

i have a base class 'TestImage' which has a concrete implementation instance variable 'urlImageState' of type 'State'

public class TestImage implements Parcelable {

  private State urlImageState, state;

  private TestImage(Parcel in) {
    urlImageState = in.readParcelable(UrlImageState.class.getClassLoader());
  }

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

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

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

  @Override
   public void writeToParcel(Parcel dest, int flags) {
      dest.writeParcelable(urlImageState, flags);
   }

   public State getState() {
    return state;
}

public void setState(State state) {
    this.state = state;
}

}

UrlImageState class:

public class UrlImageState implements Parcelable, State {

private TestImage image;
private OwnerContract.ViewModel ownerViewModel;

public UrlImageState(OwnerContract.ViewModel viewModel, TestImage image) {
    this.ownerViewModel = viewModel;
    this.image = image;
}

private UrlImageState(Parcel in) {
}

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

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

@Override
public void loadImage() {
    Log.e("", "UrlImageState");
    this.ownerViewModel.loadImageUrl(image.getUrl());
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
}
 }

'State' interface

public interface State extends Parcelable {

void loadImage();

}

inside 'onSaveInstanceState' method TestImage state is of type 'UrlImageState' as the log reveals.

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    Log.e(debugTag, image.getState() + " onSaveInstanceState");
    outState.putParcelable("image", image);
}

The problem is inside onCreate i am not getting the state(null pointer exception). Something is going very wrong with my parcelable implementation. Can anybody help??

tsiro
  • 2,323
  • 3
  • 24
  • 46

0 Answers0