Преобразование LinkedHashMap в пользовательский Java-объект android

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

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to 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?

Итак, вы знаете причину ошибки ... что еще вы хотите, чтобы мы вам объяснили?

Stultuske 27.06.2018 08:36

Я хочу, чтобы я мог назначить LinkedHashMap своему объекту (FeedItem)?

Azeem Haider 27.06.2018 08:42

эм ... нет. вы можете сопоставить содержимое своей LinkedHashMap

Stultuske 27.06.2018 08:45

вы можете показать, как выглядит ваш локальный файл?

maheryhaja 27.06.2018 08:46

@Stultuske Я только хочу преобразовать LinkedHashMap в объект FeedItem

Azeem Haider 27.06.2018 08:57

ты решил проблему @AzeemHaider

Khuynh Thành Chi Luyến 17.03.2021 09:07
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
3 577
3

Ответы 3

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

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

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

Я не могу его изменить, потому что я использую библиотеку Google Cloud Endpoint, а FeedItem - это автоматически сгенерированный файл

Azeem Haider 27.06.2018 08:43

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

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

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

Братан, если ты читаешь мой вопрос, это не NullPointerExcdption, а ClassCastException

Azeem Haider 27.06.2018 08:47

извините за это, я думаю, что ошибка в PostFeed postFeed = objectMapper.readValue (offlinePrivateFeed, PostFeed.class); эта строка не эта строка FeedItem feedItem = postFeed.getFeedList (). get (0);

Android Team 27.06.2018 08:49

вы можете отладить и проверить это.

Android Team 27.06.2018 08:49

Я знаю, где ошибка и что это за ошибка, потому что проблема в том, что я не знаю, как ее решить

Azeem Haider 27.06.2018 08:51

Из локального файла я обновил свой вопрос, посмотрите, как я пишу значение в локальном файле

Azeem Haider 27.06.2018 08:56

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

`  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

Как я уже комментирую, я не могу изменить этот файл, потому что это автоматически сгенерированный файл из облачного хранилища Google

Azeem Haider 27.06.2018 08:52

хорошо, поэтому вам нужно преобразовать полученные данные в объект FeedItem

Naman jain 27.06.2018 09:19

сначала попробуйте узнать, что вы получаете в postFeed.getFeedList (). get (0); получая его в поле типа объекта, чем вы можете соответственно использовать

Naman jain 27.06.2018 09:25

Я получаю LinkedHashMap от postFeed.getFeedList().get(0) Передать это на FeedItem не работает та же ошибка

Azeem Haider 28.06.2018 05:41

И в вашем коде LinkedHashMap требуются два параметра key и тип значения value, которые различаются для каждого элемента. проверить обновление

Azeem Haider 28.06.2018 05:44

Другие вопросы по теме