3

パーセルブルを使用しているために、アクティビティから別のアクティビティに独自のメッセージ クラスを渡そうとしています。バンドルを通過しようとしている間

アクティビティ 1 - バンドルを渡す

Intent i = new Intent(getApplicationContext(), Activity2.class);
Bundle b=new Bundle();
b.putParcelable("FolderList", mainMP3List)); //***mainMP3List is MusicFolder object***
i.putExtras(b);
startActivityForResult(i, 100); 

アクティビティ 2 - バンドルの取得

if(b.containsKey("FolderList"))
mainMP3List = b.getParcelable("FolderList");//Error is the here (readBundle: bad magic number)

2番目のアクティビティからそれらにアクセスできません。次のようなエラーが発生しています

Bundle : readBundle: 不正なマジック ナンバー

import java.util.ArrayList;

import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;

public class MusicFolder implements Parcelable{

private ArrayList<SongsNameList> songsList=new ArrayList<SongsNameList>();  
private ArrayList<MusicFolder> listOfFolders=new ArrayList<MusicFolder>();


public ArrayList<SongsNameList> getSongsList() {
    return songsList;
}

public void addSongInList(SongsNameList song) {
    this.songsList.add(song);
}

public ArrayList<MusicFolder> getListOfFolders() {
    return listOfFolders;
}
public void addFolderInList(MusicFolder folder) {
    this.listOfFolders.add(folder);
}


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

@Override
public void writeToParcel(Parcel dest, int flags) {
    //dest.writeString(category);
    Bundle b = new Bundle();
    b.putParcelableArrayList("songs", songsList);
    b.putParcelableArrayList("folders", listOfFolders);
    dest.writeBundle(b);

}

public static final Parcelable.Creator<MusicFolder> CREATOR = 
        new Parcelable.Creator<MusicFolder>() { 
    public MusicFolder createFromParcel(Parcel in) { 
        MusicFolder category = new MusicFolder();
        //category.listOfFolders = in.readString();
        Bundle b1 = in.readBundle(SongsNameList.class.getClassLoader());        
        category.songsList = b1.getParcelableArrayList("songs");

        Bundle b2 = in.readBundle(MusicFolder.class.getClassLoader());        
        category.listOfFolders = b2.getParcelableArrayList("folders");

        return category;
    }

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



  }
4

2 に答える 2

3

テストしていませんが、代わりに次のように思います:

    Bundle b1 = in.readBundle(SongsNameList.class.getClassLoader());        
    category.songsList = b1.getParcelableArrayList("songs");

    Bundle b2 = in.readBundle(MusicFolder.class.getClassLoader());        
    category.listOfFolders = b2.getParcelableArrayList("folders");

次のようにする必要があります。

    Bundle b = in.readBundle(SongsNameList.class.getClassLoader());        
    category.songsList = b.getParcelableArrayList("songs");
    category.listOfFolders = b.getParcelableArrayList("folders");
于 2012-07-05T15:48:59.607 に答える
0

これは、特定の順序で値/型を Parcelable に書き込み、異なる順序で読み取ることが原因である可能性があります (データ境界の 1 つに違反しています)。

保存/読み込み順序を確認し、問題が見つからない場合は、Parcelable実装に適用可能なコードを投稿してください。

于 2012-07-05T14:13:19.353 に答える