2011-11-26 42 views
0

我想序列化我的HashMap類並將其發送到另一個意圖。從意圖發送自定義HashMap類到另一個意圖

不幸的是,我得到一個「androidruntime-error-parcel-unable-to-marshal-value」異常。 我想如何在該類上實現可序列化?

TeamsHashMap.java:

package android.test; 
import java.io.Serializable; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Map.Entry; 

public class TeamsHashMap implements Serializable 
{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private HashMap<String,Team> teamsHashMap; 

    public TeamsHashMap() 
    { 
     teamsHashMap = new HashMap<String,Team>();  
    } 

    public Team GetTeam(String teamName) 
    { 
     Team team = null;   
     Iterator<Entry<String, Team>> iterator = teamsHashMap.entrySet().iterator();   

     while(team == null && iterator.hasNext()) 
     { 
      Map.Entry<String,Team> pair = (Map.Entry<String,Team>)iterator.next(); 
      String currentKeyTeamName = pair.getKey();   
      team = teamName.contains(currentKeyTeamName) ? (Team)pair.getValue() : null; 
     } 

     return team; 
    } 

    public void AddTeam(String teamName,Team team) 
    { 
     teamsHashMap.put(teamName, team); 
    } 
} 

在意圖把值:

byte[] teamsHashMapSerialized = SerializerClass.serializeObject(teamsHashMap); 
     notificationIntent.putExtra("teamsHashMap", teamsHashMapSerialized); 

SerializerClass.java:

package android.infra; 

import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutput; 
import java.io.ObjectOutputStream; 

public class SerializerClass { 
    public static byte[] serializeObject(Object o) { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

     try { 
      ObjectOutput out = new ObjectOutputStream(bos); 
      out.writeObject(o); 
      out.close(); 

      // Get the bytes of the serialized object 
      byte[] buf = bos.toByteArray(); 

      return buf; 
     } catch(IOException ioe) { 

      return null; 
     } 
     } 

    public static Object deserializeObject(byte[] b) { 
     try { 
      ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(b)); 
      Object object = in.readObject(); 
      in.close(); 

      return object; 
     } catch(ClassNotFoundException cnfe) {   

      return null; 
     } catch(IOException ioe) { 

      return null; 
     } 
     } 

} 

回答

-1

嘗試將HashMap放入序列化中。您不需要序列化您必須在意圖之間傳遞的對象。

+1

你不能直接用Intent發送對象......你需要序列化它,或者使用Parcelable(這是更快的),如下所示:http://stackoverflow.com/questions/2139134/how-to-發送一個對象從一個Android的活動,以另一種使用意圖 – Dalmas

+0

感謝您的評論。我想要TeamsHashMap類被序列化,但我真的不知道該怎麼做 – ohadinho

相關問題