传送到下一个活动时,Android问题在包裹中

传送到下一个活动时,Android问题在包裹中,android,serialization,parcelable,Android,Serialization,Parcelable,我正在尝试将自己的消息类从活动传递到另一个活动 所以我用的是包裹。 在试图穿过包裹时 Activity1-传递包 活动2-获取捆绑包 我无法从第二个活动访问它们 我得到这个错误就像 Bundle:readBundle:bad magic number import java.util.ArrayList; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; public clas

我正在尝试将自己的消息类从活动传递到另一个活动 所以我用的是包裹。 在试图穿过包裹时

Activity1-传递包
活动2-获取捆绑包 我无法从第二个活动访问它们 我得到这个错误就像

Bundle:readBundle:bad magic number

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



  }
import java.util.ArrayList;
导入android.os.Bundle;
导入android.os.packet;
导入android.os.Parcelable;
公共类MusicFolder实现Parcelable{
private ArrayList songsList=new ArrayList();
私有ArrayList listOfFolders=新ArrayList();
公共阵列列表getSongsList(){
返回歌曲列表;
}
公共无效添加歌曲列表(歌曲列表歌曲){
this.songsList.add(歌曲);
}
公共阵列列表getListOfFolders(){
返回文件夹列表;
}
public void addFolderInList(音乐文件夹){
此.listOfFolders.add(文件夹);
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
//目的地书面资本(类别);
Bundle b=新Bundle();
b、 putParcelableArrayList(“歌曲”,歌曲列表);
b、 putParcelableArrayList(“文件夹”,文件夹列表);
目的写账款(b);
}
公共静态最终包裹。创建者=
新建Parcelable.Creator(){
公共音乐文件夹createFromParcel(Parcel in){
MusicFolder类别=新建MusicFolder();
//category.listOfFolders=in.readString();
Bundle b1=in.readBundle(SongsNameList.class.getClassLoader());
category.songsList=b1.getParcelableArrayList(“歌曲”);
Bundle b2=in.readBundle(MusicFolder.class.getClassLoader());
category.listOfFolders=b2.getParcelableArrayList(“文件夹”);
退货类别;
}
@凌驾
公共音乐文件夹[]新数组(整数大小){
返回新的音乐文件夹[大小];
}
};
}

这可能是由于您按特定顺序将值/类型写入您的包裹,然后按不同顺序读取(违反了您的数据边界之一)


查看您的保存/加载订单,如果您没有发现问题,请发布适用于您的
包裹
实现的代码,供我们查看。

尚未对其进行测试,但我认为:

    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");

那么歌曲列表也可以打包吗?是的,只有当我单独检查它的工作性能时,它才可以打包。你能从logcat发布
readBundle:trace=…
?它应该就在
坏魔法数字之后
他已经添加了密码。无论哪种方式,问题都是他编写了一个包(带有两个arraylist),但读取了两个包。。。。不,他还没有加上密码。。。如果他的问题是
setExtras()
覆盖了包,那么代码不会在
getParcelable()
中触发,因为他在前面直接检查了密钥。是的,应该是这样。
    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");