творю андроид приложение, в котором я должен хранить/восстановить данные, которые HashMap из JavaMail сообщения, но я получаю следующее сообщение об ошибке:Передача HashMap из JavaMail сообщения для Android деятельности
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 [email protected]
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
In onSaveInstanceState, I am saving my hashmap in a SimpleParcelable class. The code for saving and restoring is :
@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 является:
public class SimpleParcelable implements Parcelable{
private final Map<String, Message[]> emailsMap;
public SimpleParcelable(HashMap<String, Message[]> messages)
{
emailsMap = messages;
}
public static final Parcelable.Creator<SimpleParcelable> CREATOR
= new Parcelable.Creator<SimpleParcelable>() {
@Override
public SimpleParcelable createFromParcel(Parcel source) {
Bundle rBundle = source.readBundle();
return new SimpleParcelable((HashMap<String, Message[]>)rBundle.getSerializable("map"));
}
@Override
public SimpleParcelable[] newArray(int size) {
// TODO Auto-generated method stub
return new SimpleParcelable[size];
}
};
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
Bundle b = new Bundle();
b.putSerializable("map", (HashMap<String, Message[]>)emailsMap);
dest.writeBundle(b);
}
public Map<String, Message[]> getEmailsMap()
{
return emailsMap;
}
}
Может кто-нибудь, пожалуйста, указать на то, что делается не так? Если что-то не так, то, пожалуйста, скажите мне, как я могу добиться этого маршаллинга и разборки кода?
Благодарим s заблаговременно.
Из вашего комментария кажется, что IMAPMessage не реализует интерфейс Parcellable. Как я могу это достичь? Извините за наивный подход, поскольку я новичок на этой платформе. Код будет очень полезен. благодаря –