Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NullPointerException while sending StringArray using Parcelable

I have got odd problem while sending intent with parcelable object. This object has got one String array. Using this answer How to send an object from one Android Activity to another using Intents? I have created first my object as parcelable and then send it. This is the fragment of my code:

    public class MyObject implements Parcelable{

    private String _title = null;
    private String[] _genre;
    private int _time = 0;
    private String _disc = null;

    private static final String TAG = "MyObject";

    public MyObject (String title, String[] genre, int time, String disc) {
        _title = title;
        _genre = genre;
        _time = time;
        _disc = disc;
    }



    public MyObject(Parcel source) {
            /*
             * Reconstruct from the Parcel
             */
            Log.v(TAG, "ParcelData(Parcel source): time to put back parcel data");
            _title = source.readString();
            try{
                source.readStringArray(_genre);
            }catch(Exception e){
                Log.e(TAG,e.toString());
            }
        _time = source.readInt();
        _disc = source.readString();
    }

    /*... Getters and setters and other stuff...*/

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        Log.v(TAG, "writeToParcel..."+ flags);
        dest.writeString(_title);
        dest.writeStringArray(_genre);
        dest.writeInt(_time);
        dest.writeString(_disc);
        Log.i(TAG,_genre[0]);
    }

    // this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods
    public static final Parcelable.Creator<MyObject> CREATOR = new Parcelable.Creator<MyObject>() {
        public MyObject createFromParcel(Parcel in) {
            return new MyObject(in);
        }

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

Sending seems ok.

Intent displayInfo = new Intent(getApplicationContext(), MovieInfo.class);
                    displayInfo.putExtra(OBJECT, mySQLiteAdapter.getEntry(idSet));
                    startActivity(displayInfo);

However, when I am trying to get this data

Intent intent = getIntent();
        myParcel = (MyObject) intent.getParcelableExtra(FBM2Activity.OBJECT);

I am getting NullPointerException from readStringArray. Does anyone know where I can have got mistake?

like image 558
sebap123 Avatar asked Feb 20 '23 20:02

sebap123


1 Answers

Use _genre = source.createStringArray().

The reasoning behind this is that readStringArray(String[] val) expects val to be a String[] that has already been created with the correct number of array elements. The way you are doing it, _genre is null when you call source.readStringArray(_genre).

like image 71
Squonk Avatar answered Feb 22 '23 09:02

Squonk