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?
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)
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With