2017-02-28 46 views
0
public class Common implements Serializable{ 

    private static HashMap<Integer,List<LevelList>> levelListMap = new HashMap<>(); 

    public static Map<Integer, List<LevelList>> getLevelListMap(Context context) { 

     File file = new File(context.getDir("data", MODE_PRIVATE), "map"); 
     ObjectInputStream inputStream = null; 
     try { 
      inputStream = new ObjectInputStream(new FileInputStream(file)); 
      levelListMap = (HashMap<Integer, List<LevelList>>) inputStream.readObject(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return levelListMap; 
    } ... 
} 

我无法序列hashmap.I不断得到java.io.NotSerializableExceptionlevelListMap = (HashMap<Integer, List<LevelList>>) inputStream.readObject();无法序列是HashMap,java.io.NotSerializableException

public class LevelList implements Serializable{ 

    public int id; 
    public String title; 
    public String imgurl; 
    public String songurl; 
    public String songtext; 
    boolean isFavourite; 

    public void release() { 

    } 


    public void setFavourite(boolean favourite) { 
     isFavourite = favourite; 
    } 

    public boolean isFavourite(){ 
     return isFavourite; 
    } 

} 
+0

请添加堆栈跟踪。 – Sangharsh

+0

序列化时,您必须得到完全相同的异常,并且您必须忽略它。不要这样做。 – EJP

回答

2

HashMap是序列化的,但是键和值也必须是可序列化。确保所有的键和值都是可序列化的,并且它们的字段也是可序列化的(不包括瞬态和静态成员)。

编辑:

HashMap<Integer,List<LevelList>>,是你的List实现序列化?

+0

是我使用ArrayList.Will它帮助,如果我改变的HashMap <整数,列表>到的HashMap <整数,ArrayList的>? –

+0

@sreejithvs不,如果你让'LevelList'实现'Serializable',它会有所帮助。当你进行序列化时,Clealry并没有这样做,显然你忽略了同一个例外。 – EJP

1

检查此链接How to serialize a list in Java。 List的标准实现,即ArrayList,LinkedList等是可序列化的。

如果你宣布你的列表,列表亚型如ArrayList<LevelList> levelList = new ArrayList<LevelList>();那么它应该是序列化的开箱之一。否则,你将需要投以安全的方式,如设置与<T extends List<Foo> & Serializable> setFooList(T list)的List实现由Theodore Murdock在回答线程建议。

+1

“他们需要首先被浇铸为Serializable接口类型” - 作为序列化的类型检查是在运行时 –

+0

做@SteveKuo我会继续前进,修改该声明,感谢指出了这一点这种说法是不正确。 – themantimes8

相关问题