将LinkedHashMap转换为自定义Java对象android

时间:2018-06-27 06:33:32

标签: java android jackson jackson2

我正在使用jackson来将对象读写到本地json文件中。
它成功读取和写入值。但是问题是当我从文件中读取值时。并将其分配给我的对象会给我一个错误。

  

java.lang.ClassCastException:java.util.LinkedHashMap无法转换为com.testing.FeedItem

我知道错误的原因,因为使用LinkedHashMap从文件Jackons读取值,所以LinkedHashMap无法转换为object(FeedItem)

这就是我正在使用的。

PostFeed

  public class PostFeed{
       private String name;
       private List<FeedItem> feeditemList;
       // other code getter setter etc
  }

从文件中读取值

ObjectMapper objectMapper = new ObjectMapper();
PostFeed postFeed = objectMapper.readValue(offlinePrivateFeed, PostFeed.class);

FeedItem feedItem = postFeed.getFeedList().get(0); // Error

将写入值更新为本地文件

     ObjectMapper objectMapper = new ObjectMapper();
     objectMapper.writeValue(Utils.getOutputJsonFile("private-feed"), postFeed);

我发现了类似的问题LinkedhashMap can not cast to model Account,但这个问题对我而言没有用,几乎我尝试了所有答案,但没有人解决我的问题。

您能告诉我如何解决吗?

更新:FeedItem

  public class FeedItem{
     private String name;
     private int badge;
     private Boolean allow;
     // other code getter setter etc
  }

更新:JSON文件

{
 "feedName": "test123",
 "time" : "7-7-1994",
 "feedList": [
  {
   "name": "feedItemName",
   "badge": 4,
   "allow": false
  },
  {
   "name": "feedItemName",
   "badge": 1,
   "allow": true
  },
  {
   "name": "feedItemName",
   "badge": 2,
   "allow": false
  }

  ]

}

更新:解决方案

可以通过将LinkedHashMap转换为自定义对象FeedItem来解决这个问题,但问题是如何将LinkedHashMap转换为Object

3 个答案:

答案 0 :(得分:0)

LinkedHashMap实现了Map not List

https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html

也许将您的feeditemList字段类型更改为LinkedHashMap

答案 1 :(得分:0)

如果您的PostFeed对象不为null,然后feeditemList也为空,请尝试以下代码,然后在下面的代码中使用。.

    if (postFeed!=null &&  !postFeed.getFeedList().isEmpty()){

        FeedItem feedItem = postFeed.getFeedList().get(0);
    }

答案 2 :(得分:0)

尝试使用此:

`  public class PostFeed{
       private String name;
       private LinkedHashMap<FeedItem> feeditemList;
//     private Map<FreedItem> freeditemlist
       // or you can also do this
       // other code getter setter etc
  }`

因为LinkedHashMap实现了Map not List