Android JSON解析与GSON崩溃:LinkedTreeMap无法强制转换为对象
我试图将对象列表存储到SharedReferences中,因此我使用Gson将对象列表转换为JSON并再次转换。但是,当我存储然后检索对象列表,并且ListView的适配器应用于新列表时,我得到以下错误:Android JSON解析与GSON崩溃:LinkedTreeMap无法强制转换为对象,android,json,sharedpreferences,gson,Android,Json,Sharedpreferences,Gson,我试图将对象列表存储到SharedReferences中,因此我使用Gson将对象列表转换为JSON并再次转换。但是,当我存储然后检索对象列表,并且ListView的适配器应用于新列表时,我得到以下错误: java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to appuccino.simplyscan.Objects.Folder at appuccino
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);
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<>();
}
//folderList是一个列表folderList=new ArrayList();
添加(0,新文件夹);
Gson Gson=新的Gson();
字符串newFoldersJson=gson.toJson(folderList);
PrefManager.putString(PrefManager.FOLDER_JSON,newFoldersJson);
其中最后一行只是将字符串存储到SharedReferences中。从SharedReferences检索列表时,我使用了以下命令:
//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);
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<>();
}
公共静态列表加载文件夹(MainActivity main){
//包含文件夹对象列表的JSON
String foldersJSON=PrefManager.getString(PrefManager.FOLDER_JSON,“”);
如果(!foldersJSON.isEmpty()){
Gson Gson=新的Gson();
List folderList=gson.fromJson(foldersJSON,List.class);
返回文件夹列表;
}
返回新的ArrayList();
}
如果有帮助,下面是如何定义my Folder类:
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<>();
}
}
公共类文件夹{
私有字符串名称;
私有列表文件名列表;
私人临时名单;
公用文件夹(字符串n){
name=n;
docList=newarraylist();
docNameList=newarraylist();
}
}
不是对你问题的回答,而是一个建议。我最近还尝试在Android中使用json,并研究了很多关于使用jackson或gson的方法。杰克逊似乎有两个优点:
该错误清楚地显示它发生在
DocumentAdapter类的getView(…)
方法中(特别是第117行)。那个么为什么你们还并没有发布该方法的完整代码呢?可能需要一个空的文件夹构造函数。请看:我现在有一个类似的问题,我相信问题在于,当您使用Gson将Json转换为Object.class时,像这样new Gson().fromJson(jsonstring,Object.class)
它不会创建java.lang.Object,而是创建com.google.Gson.internal.LinkedTreeMap。您可能将LinkedTreeMap序列化为Java对象,然后在反序列化过程中失败。[我现在将对此进行进一步调查,如果您在此期间找到了解决方案,请告诉我。]