Конвертировать LinkedHashMap в пользовательский Java-объект Android - PullRequest
0 голосов
/ 27 июня 2018

Я использую jackson для чтения и записи объекта в локальный файл json.
Это успешно читать и записывать значение. Но проблема в том, когда я читаю значение из файла. и назначить его моему объекту, это даст мне ошибку.

java.lang.ClassCastException: java.util.LinkedHashMap не может быть приведен к com.testing.FeedItem

Я знаю причину ошибки, потому что для чтения значения из файла jackons используйте LinkedHashMap Итак, LinkedHashMap не может привести к объекту (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 не может привести к модели учетной записи Но этот вопрос бесполезен в моем случае, Почти я попробовал все ответы, но никто не решил мою проблему.

Подскажите, пожалуйста, как я могу решить эту проблему?

Обновление: 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 голосов
/ 27 июня 2018

Попробуйте этот код, если ваш объект PostFeed не нулевой, тогда также feeditemList не пуст, тогда используется код ниже ..

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

        FeedItem feedItem = postFeed.getFeedList().get(0);
    }
0 голосов
/ 27 июня 2018

Попробуйте использовать это:

`  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 реализует карту, а не список

0 голосов
/ 27 июня 2018

LinkedHashMap реализует карту, а не список

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

Возможно, измените тип поля feeditemList на LinkedHashMap

...