Java 使用Parcelable发送StringArray时出现NullPointerException
我在发送带有可包裹对象的意向书时遇到了奇怪的问题。此对象具有一个字符串数组。使用这个答案,我首先将我的对象创建为parcelable,然后发送它。这是我的代码片段:Java 使用Parcelable发送StringArray时出现NullPointerException,java,android,android-intent,parcelable,Java,Android,Android Intent,Parcelable,我在发送带有可包裹对象的意向书时遇到了奇怪的问题。此对象具有一个字符串数组。使用这个答案,我首先将我的对象创建为parcelable,然后发送它。这是我的代码片段: public class MyObject implements Parcelable{ private String _title = null; private String[] _genre; private int _time = 0; private String _disc =
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];
}
};
}
然而,当我试图获取这些数据时
Intent intent = getIntent();
myParcel = (MyObject) intent.getParcelableExtra(FBM2Activity.OBJECT);
我从readStringArray获得NullPointerException。有人知道我哪里会出错吗?使用
\u genre=source.createStringArray()
这背后的原因是
readStringArray(String[]val)
期望val
是一个String[]
已使用正确数量的数组元素创建。在调用source.readStringArray(\u-genre)
时,\u-genre
是null
,空指针异常发生在哪些行上?最下面的一个?不,空指针异常发生在source.readStringArray(\u)行代码>。这就是为什么它被try/catch包围的原因。最后一行是使用构造函数,这里是这一行。非常感谢。我不知道,很乐意帮忙。readStringArray(String[]val)
的文档没有解释它,但我通过查看Parcel
的源代码找到了它。请参阅电流源中的第929行。。。如果(N==val.length)
Intent intent = getIntent();
myParcel = (MyObject) intent.getParcelableExtra(FBM2Activity.OBJECT);