将自定义HashMap类从intent发送到另一个intent

时间:2011-11-26 12:37:27

标签: android android-layout android-intent android-activity

我正在尝试序列化我的HashMap类并将其发送给另一个意图。

不幸的是,我得到了一个“androidruntime-error-parcel-could-to-marshal-value”异常。 我怎么想在该类上实现serializable?

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 个答案:

答案 0 :(得分:-1)

尝试放置HashMap而不对其进行序列化。您不需要序列化必须在意图之间传递的对象。