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。我不断获取java.io.NotSerializableException
levelListMap = (HashMap<Integer, List<LevelList>>) inputStream.readObject();
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 :(得分:2)
HashMap
是可序列化的,但键和值也必须是可序列化的。确保所有键和值都是可序列化的,并且它们的字段也是可序列化的(不包括瞬态和静态成员)。
编辑:
HashMap<Integer,List<LevelList>>
,您的List
实施是否可序列化?
答案 1 :(得分:1)
点击此链接How to serialize a list in Java。 List的标准实现,即ArrayList,LinkedList等是可序列化的。
如果您将List声明为List ArrayList<LevelList> levelList = new ArrayList<LevelList>();
之类的List子类型,那么它应该可以开箱即用。否则,您需要以安全的方式进行投射,例如按照Theodore Murdock在该回答帖子中的建议设置列表实施<T extends List<Foo> & Serializable> setFooList(T list)
。