Skip to content Skip to sidebar Skip to footer

Parcel, Classloader And Reading Null Values

I am trying to understand how to read null values from Parcel properly. Let's look my use case: public class MyModel implements Parcelable { private Long id; private String

Solution 1:

How about supply ClassLoader with MyModel.class. getClassLoader()?

Solution 2:

What is the best approach to read null values from Parcel in that case?

You can use the string-specific methods:

  • Parcel.writeString(String)
  • Parcel.readString()

They work perfectly well with null values.


For example, assume you have a class with the following fields in it:

publicclassTestimplementsParcelable{
    publicfinalint id;
    privatefinalString name;
    publicfinalString description;
    ...

You create the Parcelable implementation like this (using Android Studio autoparcelable tool):

@OverridepublicvoidwriteToParcel(Parcel dest, int flags) {
    dest.writeInt(id);
    dest.writeString(null); // NOTE the null value here
    dest.writeString(description);
}

protectedTest(Parcel in) {
    id = in.readInt();
    name = in.readString();
    description = in.readString();
}

Your Test.name value will be deserialised as null correctly, without requiring any casting to String.

Solution 3:

I think the best way to do this is to write the length of string name before name. If name is null, just write 0 as its length, and do not write name. When reading, if length is read and its value is zero, do not read name and just set name to null.

Post a Comment for "Parcel, Classloader And Reading Null Values"