In your onSaveInstanceState method you're trying to make a Parcel out of one or more instances of com.sun.mail.imap.IMAPMessage, which does not include the Parcellable interface. ALL instances you're trying to parcel have to implement this interface.
Passing HashMap of JavaMail Messages to Android activities
-
14-10-2022 - |
Question
I am making android application in which i have to store/restore data which is HashMAp of JavaMail Messages but I am getting the following error:
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
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);
}
And the Serializing code SimpleParcelable is :
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;
}
}
Can anyone please point out what is being done wrong? If there is anything wrong then please tell me how can I achieve this marshalling and unmarshalling of code?
Thank s in advance.
No correct solution
OTHER TIPS
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow