0

我正在尝试将地图保存到文件中,但我得到java.io.NotSerializableException. 我知道这意味着我必须为类实现 Serializable。问题是即使实现了 Serializable 也会引发错误。

存储代码:

private void storePoints(Map<String,WifiPoint> list) throws IOException{
    // store in file
    FileOutputStream fos = context.openFileOutput("points", Context.MODE_PRIVATE);
    ObjectOutputStream os = new ObjectOutputStream(fos);
    os.writeObject(list);
    os.close();
}

无线点:

public class WifiPoint implements Serializable{
    private static final long serialVersionUID = 2;
    public String ssid;
    public String bssid;
    public String capabilities;
    public double latitude;
    public double longitude;
    public int level;
}

更新:真正的解决方法是:我需要在一个单独的文件中声明 WifiPoint,而不是在另一个类中声明它。

抱歉,我没有正确输入代码以便任何人得到正确答案

4

5 回答 5

2

您正在尝试序列化Map您正在使用的 Map 类的检查Serializable

注意: AHashMapSerializable,所以如果可能的话切换到那个。

于 2013-02-21T13:57:07.223 回答
1
  • 检查您是否实际实施java.io.Serializable
  • 检查您要序列化的地图也实现java.io.Serializable
于 2013-02-21T13:59:35.903 回答
1

我需要在一个单独的文件中声明 WifiPoint,而不是在另一个类中声明它。

于 2013-02-22T16:57:18.117 回答
0

您将 Map 对象传递给 storePoints 方法,检查您传递的 Map 对象是否实现 Serializable。(如果你使用HashMap,java.util包的TreeMap肯定会实现Serializable。)

于 2013-02-21T14:01:28.957 回答
0

检查 Map 没有实现序列化接口:

All Known Implementing Classes:
AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, ConcurrentSkipListMap,
EnumMap, HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons,             Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport, TreeMap,
UIDefaults, WeakHashMap

来源:http ://docs.oracle.com/javase/6/docs/api/java/util/Map.html

你可以试试这个:Java: Writting/Reading a Map from disk

于 2013-02-21T14:04:26.517 回答