3
我想將對象列表存儲到SharedPreferences,所以我使用Gson將對象列表轉換爲JSON並再次返回。然而,當我保存然後檢索對象的列表和ListView的接頭被用於新的列表中,我得到以下錯誤:安卓JSON解析與GSON崩潰:LinkedTreeMap不能轉換爲對象
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to appuccino.simplyscan.Objects.Folder
at appuccino.simplyscan.Extra.DocumentAdapter.getView(DocumentAdapter.java:117)
,其中在這條線在列表中的適配器的錯誤點:
Folder folder = folderList.get(position);
當存儲對象列表,我使用了以下內容:
//folderList is a List<Folder> folderList = new ArrayList<>();
folderList.add(0, newFolder);
Gson gson = new Gson();
String newFoldersJson = gson.toJson(folderList);
PrefManager.putString(PrefManager.FOLDER_JSON, newFoldersJson);
在最後一行只存儲串入SharedPreferences。當檢索從SharedPreferences列表中,我使用了以下內容:
public static List<Folder> loadFolders(MainActivity main){
//JSON containing a list of folder objects
String foldersJSON = PrefManager.getString(PrefManager.FOLDER_JSON, "");
if(!foldersJSON.isEmpty()){
Gson gson = new Gson();
List<Folder> folderList = gson.fromJson(foldersJSON, List.class);
return folderList;
}
return new ArrayList<>();
}
如果有幫助,這是我的文件夾類是如何定義的:
public class Folder {
private String name;
private List<String> docNameList;
private transient List<Document> docList;
public Folder(String n) {
name = n;
docList = new ArrayList<>();
docNameList = new ArrayList<>();
}
}
誤差清楚地示出它在'DocumentAdapter'類的'getView(...)'方法時發生(特別是117行)。那麼爲什麼你沒有發佈該方法的完整代碼呢? – Squonk
可能需要用於Folder的空構造函數。請參閱:http://stackoverflow.com/a/4318722/2832027 – TTransmit
我現在有類似的問題,我相信問題是,當你使用Gson將Json轉換爲Object.class時,像這個'new Gson()。 fromJson(jsonstring,Object.class)'它不會創建一個java.lang.Object,而是一個com.google.gson.internal.LinkedTreeMap。您可能序列化該LinkedTreeMap認爲它是一個Java對象,然後在反序列化期間失敗。 [我現在會進一步調查,如果您在此期間找到了解決方案,請告訴我。] –