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

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top