2011-11-26 66 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

相关问题