2011-11-04 39 views
1

我有這樣的:如何轉換雙[] []是parcelable

public double[][] mRoute; 

,我需要有它是Parcelable,但我不能肯定要做到這一點的最好辦法。

它似乎將它變成List,然後寫這不是正確的做法。

UPDATE:

這是從@欲哭的回答編譯。

out.writeInt(mRoute.length); // store the length 
    for (int i = 0; i < mRoute.length; i++) { 
     out.writeInt(mRoute[i].length); 
     out.writeDoubleArray(mRoute[i]); 
    } 
    mRoute = new double[in.readInt()][]; 
    for (int i = 0; i < mRoute.length; i++) { 
     mRoute[i] = new double[in.readInt()]; 
     in.readDoubleArray(mRoute[i]); 
    } 

我還沒有嘗試過,只是把它編譯,這是一個開始。

回答

1

你不能讓一個double [] []一個Parcelable,但你可以創建一個實現Parcelable幷包含雙[] []一類。

上writeToParcel(包裹DEST),這樣做:在readFromParcel

dest.writeInt(mRoute.length); // store the length 
for (int i = 0; i < mRoute.length; i++) { 
    dest.writeDoubleArray(mRoute[i]); 
} 

(包裹中),這樣做:

mRoute = new double[][in.readInt()]; 
for (int i = 0; i < mRoute.length; i++) { 
    mRoute[i] = in.readDoubleArray(); 
} 
+0

哇,我沒想到這個方法。我很尷尬,我沒有,但它是這樣一個簡單的解決方案。謝謝。我現在會嘗試。 :) –

0

我從來沒有用過Parcelable自己,但讀的JavaDoc後,我認爲這將一般工作:

  1. 創建一個類Foo implements Parcelable一個包裝了double[],所以你可以使用
    Parcel#[create|write]doubleArray(),然後
  2. 創建一個類Bar implements Parcelable,其中包含Foo[],因此您可以使用
    Parcel#[create|write]TypedArray()

(對不起,這是有點長了一個評論,我很高興地刪除,如果它是沒有用的。)


像這樣(編譯但沒有測試,沒有@Overrides買者自負和whot):

public class Foo implements Parcelable { 
    private double[] mData; 

    // Not really sure what bitmask to use for a double[]... 
    public int describeContents() { 
     return 0; 
    } 

    public void writeToParcel(Parcel out, int flags) { 
     out.writeDoubleArray(mData); 
    } 

    public static final Creator<Foo> CREATOR = new Creator<Foo>() { 

     public Foo createFromParcel(Parcel in) { 
      return new Foo(in); 
     } 

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

    private Foo(Parcel in) { 
     mData = in.createDoubleArray(); 
    } 
} 

public class Bar implements Parcelable { 
    private Foo[] mData; 

    // Same as above 
    public int describeContents() { 
     return 0; 
    } 

    public void writeToParcel(Parcel out, int flags) { 
     out.writeTypedArray(mData, 0); 
    } 

    public static final Creator<Bar> CREATOR = new Creator<Bar>() { 

     public Bar createFromParcel(Parcel in) { 
      return new Bar(in); 
     } 

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

    private Bar(Parcel in) { 
     mData = in.createTypedArray(Foo.CREATOR); 
    } 
}