2017-02-28 72 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

相關問題