2014-02-20 1 views
0

творю андроид приложение, в котором я должен хранить/восстановить данные, которые 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 заблаговременно.

ответ

1

В вашем методе onSaveInstanceState вы пытаетесь сделать посылку из одного или более экземпляров com.sun.mail.imap.IMAPMessage, которые не включают в себя интерфейс Parcellable. ВСЕ экземпляры, которые вы пытаетесь отправить, должны реализовать этот интерфейс.

+0

Из вашего комментария кажется, что IMAPMessage не реализует интерфейс Parcellable. Как я могу это достичь? Извините за наивный подход, поскольку я новичок на этой платформе. Код будет очень полезен. благодаря –

Смежные вопросы