使用Parceable在android中传递对象

时间:2015-07-22 14:47:16

标签: java android

写了一个帮助传递我的对象的类,工作正常,直到我想自己传递更通用的对象。

public class StepParceble implements Parcelable {
private Step mStep;
private JSONObject mStepData;
private onScreen mOnScreen;

public StepParceble(Step step, JSONObject stepData, onScreen onScreen) {
    setmStep(step);
    setmStepData(stepData);
    setmOnScreen(onScreen);
}

public StepParceble(Parcel parcel){

}
public onScreen getmOnScreen() {
    return mOnScreen;
}

public void setmOnScreen(onScreen mOnScreen) {
    this.mOnScreen = mOnScreen;
}

public void setmStep(Step mStep) {
    this.mStep = mStep;
}

public void setmStepData(JSONObject mStepData) {
    this.mStepData = mStepData;
}

public JSONObject getmStepData() {
    return mStepData;
}

public Step getmStep() {
    return mStep;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    try {
        dest.writeArray(new Object[]{mStep, mStepData,mOnScreen});
    } catch (Exception e) {
    }
}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    public StepParceble createFromParcel(Parcel in) {
        return new StepParceble(in);
    }

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

}

它会在获取任何值时返回空指针。

将数据传递为

StepParceble stepParceble = new StepParceble(step, stepData, onScreen);
            Intent uiIntent = new Intent(context, UIActivity.class).putExtra(UiControlTrier.STEP_KEY,stepParceble);

1 个答案:

答案 0 :(得分:0)

当您覆盖构造函数时,您没有提供从parcelable中读取字段的方法

public StepParceble(Parcel parcel){
//add methods to populate fields from parcel
}

您可以使用Android Studio插件为您执行此操作: https://github.com/mcharmas/android-parcelable-intellij-plugin

此外,如果您的类具有复杂类型字段(例如您的案例中的步骤),那么这些字段也应该是Parcelable