2016-04-27 8 views
1

私はAndroidアプリで作業していて、画面が回転しているときにデータを保存しようとしています。私はこのデータをmCheatedResultsという配列に持っています。ブールデータとintをペアにするカスタムオブジェクトの配列です。カスタムオブジェクトのクラスを作成するための私のコードはこれです:savedInstanceStateBundleでParcelableオブジェクトの配列を含める方法

private class Pair implements Parcelable{ 
    private int mIndex; 
    private boolean mCheated; 

    public Pair(int mIndex, boolean mCheated){ 
     this.mIndex=mIndex; 
     this.mCheated=mCheated; 
    } 
    public Pair(Parcel in){ 
     mIndex= in.readInt(); 
     mCheated=in.readByte()!=0; 
    } 
    public int describeContents() { 
     return 0; 
    } 
    public void writeToParcel(Parcel out, int flags){ 
     out.writeInt(mIndex); 
     out.writeByte((byte)(mCheated ? 1:0)); 
    } 
    public final Parcelable.Creator<Pair> CREATOR = new Parcelable.Creator<Pair>(){ 
     public Pair createFromParcel(Parcel in){ 
      return new Pair(in); 
     } 
     public Pair[] newArray(int size) { 
      return new Pair[size]; 
     } 
    }; 
    public int getIndex(){ 
     return mIndex; 
    } 
    public boolean didCheat(){ 
     return mCheated; 
    } 
    public void setBoolean(boolean mCheated) { 
     this.mCheated = mCheated; 
    } 
} 

次のように私はバンドルにペアオブジェクトの配列を添付するために使用しようとしていますコードは次のとおりです。

public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    Log.i(TAG, "onSaveInstanceState"); 
    savedInstanceState.putInt(KEY_INDEX, mCurrentIndex); 
    savedInstanceState.putParcelableArray(QUESTIONS_CHEATED, mCheatedResults); 
} 

私が見つかりました。これはうまくいくはずだが、動作していないように見える文書。助言がありますか?

+1

コンパイルエラー、ランタイム例外、または値が保存されていませんか?正確な問題は何ですか? – Abdullah

+0

実行時またはコンパイル時にエラーはありません。しかし、値が保存されているかのようにアプリケーションは動作しません。 –

答えて

0

バンドルから直接パーセル可能な配列を読み取ることはできません。例:

Pair[] pairs = savedInstanceState.getParcelableArray(QUESTIONS_CHEATED); 

だから、これは私がParcelable配列を読む方法です:

Parcelable[] parcelables = savedInstanceState.getParcelableArray(QUESTIONS_CHEATED); 
Pair[] pairs = new Pair[parcelables.length]; 
for(int i = 0; i < parcelables.length; i++) { 
    pairs[i] = (Pair) parcelable[i]; 
} 

誰かがより良い方法を知っている場合、私がしてください知っていただきたいと思います。

関連する問題