I'm writing my first Android app. I extended Intent to enforce some things, e.g. setting a class; which worked fine. Now I want to parcel this subclass and implemented the methods according to the documentation.
My problem is that the mere existence of these methods causes Activity#startActivity to produce a NullPointerException.
CODE
public class ExplicitIntent<T> extends Intent {
private final Class<T> cls;
public ExplicitIntent( Context packageContext, Class<T> cls ) {
super( packageContext, cls );
this.cls = cls;
}
private ExplicitIntent( Parcel in ) {
super();
super.readFromParcel( in );
cls = (Class<T>) in.readSerializable();
}
@Override
public void writeToParcel( Parcel out, int flags ) {
super.writeToParcel( out, flags );
out.writeSerializable( cls );
}
public static final Parcelable.Creator<ExplicitIntent<?>> CREATOR = new Parcelable.Creator<ExplicitIntent<?>>() {
public ExplicitIntent<?> createFromParcel( Parcel in ) {
return new ExplicitIntent<>( in );
}
public ExplicitIntent<?>[] newArray( int size ) {
return new ExplicitIntent<?>[size];
}
};
}
The following exception appears when I create a new ExplicitIntent without parceling anything
Logcat
2020-05-13 20:57:40.217 22534-22534/xxx.list E/AndroidRuntime: FATAL EXCEPTION: main
Process: xxx.list, PID: 22534
java.lang.NullPointerException: FileDescriptor must not be null
at android.os.Parcel.readException(Parcel.java:2010)
at android.os.Parcel.readException(Parcel.java:1950)
at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4352)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1611)
at android.app.Activity.startActivityForResult(Activity.java:4487)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
at android.app.Activity.startActivityForResult(Activity.java:4445)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
at android.app.Activity.startActivity(Activity.java:4806)
at android.app.Activity.startActivity(Activity.java:4774)
at xxx.list.MainActivity.openActivity(MainActivity.java:160)