传送到下一个活动时,Android问题在包裹中
我正在尝试将自己的消息类从活动传递到另一个活动 所以我用的是包裹。 在试图穿过包裹时 Activity1-传递包传送到下一个活动时,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
活动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");