无法序列化Hashmap,java.io.NotSerializableException

时间:2017-02-28 18:14:19

标签: java android

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;
    }

}

2 个答案:

答案 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)