【发布时间】:2014-03-21 01:24:27
【问题描述】:
我正在制作 android 应用程序,我必须在其中存储/恢复作为 JavaMail 消息的 HashMAp 的数据,但我收到以下错误:
02-20 08:11:25.650: E/AndroidRuntime(2264): FATAL EXCEPTION: main
02-20 08:11:25.650: E/AndroidRuntime(2264): java.lang.RuntimeException: Parcel: unable to marshal value com.sun.mail.imap.IMAPMessage@40e36828
02-20 08:11:25.650: E/AndroidRuntime(2264): at android.os.Parcel.writeValue(Parcel.java:1235)
02-20 08:11:25.650: E/AndroidRuntime(2264): at android.os.Parcel.writeArray(Parcel.java:641)
02-20 08:11:25.650: E/AndroidRuntime(2264): at android.os.Parcel.writeValue(Parcel.java:1220)
02-20 08:11:25.650: E/AndroidRuntime(2264): at android.os.Parcel.writeMapInternal(Parcel.java:591)
02-20 08:11:25.650: E/AndroidRuntime(2264): at android.os.Parcel.writeMap(Parcel.java:575)
02-20 08:11:25.650: E/AndroidRuntime(2264): at android.os.Parcel.writeValue(Parcel.java:1166)
02-20 08:11:25.650: E/AndroidRuntime(2264): at android.os.Parcel.writeMapInternal(Parcel.java:591)
02-20 08:11:25.650: E/AndroidRuntime(2264): at android.os.Bundle.writeToParcel(Bundle.java:1627)
02-20 08:11:25.650: E/AndroidRuntime(2264): at android.os.Parcel.writeBundle(Parcel.java:605)
02-20 08:11:25.650: E/AndroidRuntime(2264): at com.example.androidtablayout.SimpleParcelable.writeToParcel(SimpleParcelable.java:57)
</code>
MailActivity.java
在 onSaveInstanceState 中,我将哈希图保存在 SimpleParcelable 类中。保存和恢复的代码是:
@Override
protected void onSaveInstanceState(Bundle outState) {
Log.i("mustang", "Saving activity states. size : " + emailsMap.size());
if(emailsMap.size() > 0)
{
outState.putParcelable("parcel", new SimpleParcelable(emailsMap));
}
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle state) {
// TODO Auto-generated method stub
Log.i("mustang", "Restoring activity states.");
super.onRestoreInstanceState(state);
SimpleParcelable stateParcel = state.getParcelable("parcel");
emailsMap = (HashMap<String, Message[]>)stateParcel.getEmailsMap();
this.emailsFetched(emailsMap.get("INBOX"), "INBOX", TaskType.NONE);
}
序列化代码 SimpleParcelable 是:
公共类 SimpleParcelable 实现 Parcelable{
私人最终地图 emailsMap;
公共 SimpleParcelable(HashMap 消息)
{
emailsMap = 消息;
}
公共静态最终 Parcelable.Creator CREATOR
= 新 Parcelable.Creator() {
@覆盖
public SimpleParcelable createFromParcel(Parcel source) {
捆绑 rBundle = source.readBundle();
return new SimpleParcelable((HashMap)rBundle.getSerializable("map"));
}
@覆盖
公共 SimpleParcelable[] newArray(int size) {
// TODO 自动生成的方法存根
返回新的 SimpleParcelable[大小];
}
};
@覆盖
公共 int describeContents() {
// TODO 自动生成的方法存根
返回0;
}
@覆盖
公共无效writeToParcel(包裹目的地,int标志){
捆绑 b = 新捆绑();
b.putSerializable("map", (HashMap)emailsMap);
dest.writeBundle(b);
}
公共地图 getEmailsMap()
{
返回电子邮件地图;
}
}
谁能指出做错了什么?如果有什么问题,请告诉我如何实现代码的编组和解组?
提前致谢。
【问题讨论】:
标签: java android marshalling unmarshalling parcelable