Как конвертировать double [] [] в парцеллы - PullRequest
1 голос
/ 04 ноября 2011

У меня есть это:

public double[][] mRoute;

, и мне нужно, чтобы оно было Parcelable, но я не уверен в лучшем способе сделать это.

Кажется, что поворотэто в List, а затем пишет, что это неправильный подход.

ОБНОВЛЕНИЕ:

Это то, что составлено из ответа @ yuku.

    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]);
    }

Я не пробовал, просто получил его для компиляции, и это начало.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Вы не можете сделать double [] [] Parcelable, но вы можете создать класс, который реализует Parcelable и содержит этот double [] [].

на writeToParcel (Parcel dest), сделайте:

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

на readFromParcel (Parcel in), выполните:

mRoute = new double[][in.readInt()]; 
for (int i = 0; i < mRoute.length; i++) {
    mRoute[i] = in.readDoubleArray();
}
0 голосов
/ 04 ноября 2011

Я никогда не использовал Parcelable сам, но после прочтения JavaDoc я думаю, что это, как правило, будет работать:

  1. Создайте класс Foo implements Parcelable, который переносит double[], поэтому вы можете использовать
    Parcel#[create|write]doubleArray(), а затем
  2. Создайте класс Bar implements Parcelable, который включает Foo[], так что вы можете использовать
    Parcel#[create|write]TypedArray()

(Извините, комментарий немного длинный, я рад удалить его, если он бесполезен.)


Вот так (скомпилировано, но не проверено, нет @Overrides, предостережение emptor и еще):

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);
    }
}
...