3

アクティビティ 1:

Bundle bundle = new Bundle();
bundle.putSerializable("CustomLevelData",  LevelCreator.LCLevelData);
Intent i = new Intent(LevelCreatorPopout.this, GameView.class);
i.putExtras(bundle);
startActivity(i);

アクティビティ 2:

LevelData=(int[][]) extras.getSerializable("CustomLevelData");

エラー: E/AndroidRuntime(16220): FATAL EXCEPTION: main E/AndroidRuntime(16220): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.powerpoint45.maze/com.powerpoint45.maze.GameView}: java.lang.ClassCastException: java.lang.Object[] cannot be cast to int[][]

検索しましたが、2d INT配列の受け渡しで何も見つかりませんでした

4

3 に答える 3

2

それでも Serializable に固執したい場合は、2 番目のアクティビティでそれを中断し、ループを実行する必要があります。

Bundle dataBundle = getIntent().getExtras();
int[][] levelData = new int[3][3];

Object[] temp = (Object[])dataBundle.getSerializable("CustomLevelData");
if(temp != null){
    levelData = new int[temp.length][];
    for(int i = 0; i < temp.length; i++){
        levelData[i] = (int[])temp[i];
    }
}
于 2013-11-05T04:25:10.433 に答える
1

非プリミティブ データを渡すには、パフォーマンスの観点から、Serializable の代わりにParcelableを使用することをお勧めします。

これが最善のアイデアかどうかはわかりませんが、2 次元配列を含み、Parcelable を実装するクラスを定義できます。次に、次を使用してアクティビティからそのクラスのインスタンスを渡すことができます。

Intent intent = this.getIntent();
// Assume MyClass is the class which contains the 2d-array
intent.putExtra("key", myclassObj); //value being the instance/object of MyClass that you want to pass

次を使用して、別のアクティビティで取得できます。

Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
MyClass mc = (MyClass)bundle.getParcelable("key"); 
于 2013-11-05T03:52:15.877 に答える
0

私がしたこと:

クラスを作る

package com.powerpoint45.maze;

android.os.Parcel をインポートします。android.os.Parcelable をインポートします。

public class SerializableCustomData は Parcelable を実装します{

public int[][] ints;

public int[][] getints() {
    return ints;
}

public void setints(int[][] ints) {
    this.ints = ints;
}

public SerializableCustomData() {
    ints = new int[1][1];
}

public SerializableCustomData(Parcel in) {
    ints = (int[][]) in.readSerializable();
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeSerializable(ints);

}
public static final Parcelable.Creator<SerializableCustomData> CREATOR = new Parcelable.Creator<SerializableCustomData>() {

    @Override
    public SerializableCustomData createFromParcel(Parcel in) {
        return new SerializableCustomData(in);
    }

    @Override
    public SerializableCustomData[] newArray(int size) {
        return new SerializableCustomData[size];
    }
};

}

設定してパスする

SerializableCustomData myParcelable = new SerializableCustomData();
            myParcelable.setints(LevelCreator.LCLevelData);

            Intent i = new Intent(LevelCreatorPopout.this, GameView.class);
            i.putExtra("parcel",myParcelable);
            startActivity(i);

それをつかむ

SerializableCustomData myParcelable = extras.getParcelable("parcel");
            LevelData = myParcelable.getints();
于 2013-11-06T00:24:24.410 に答える