Котлин: Передача HashMap с несколькими типами значений в функцию - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть HashMap, который выглядит следующим образом:

{
    "name": "George",
    "weeks": [
        {
            "checked": true,
            "days": [
                {
                    "checked": true,
                    "exercises": [
                        {
                            "exercise": "Bench Press",
                            "sets": [
                                {
                                    "weight": 300,
                                    "reps": 20
                                },
                                {
                                    "weight": 400,
                                    "reps": 30
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

Поэтому я подумал, что могу передать его в конструктор класса следующим образом:

data class Gainer(val weeks: ArrayList<HashMap<String, ArrayList<HashMap<String, ArrayList<HashMap<String, ArrayList<HashMap<String, Long>>>>>>>>?, val name: String?) {

Однако яполучаю эту ошибку:

java.lang.RuntimeException: Could not deserialize object. Expected a List, but got a class java.lang.String (found in field 'weeks.[0].days.[0].exercises.[0].exercise')

Я предполагаю, что получаю эту ошибку, потому что когда я указываю Hashmap<String, ArrayList ...> Он ожидает String в качестве типа ключа и ArrayList в качестве значениятип.Однако иногда я устанавливаю boolean в качестве одного из значений и ArrayList в качестве другого значения.Я не уверен, как указать несколько типов значений.

edit: То, что я передаю, на самом деле не является данными json, как показано.Технически это documentSnapshot.Я получаю это от Firestore.Извините, мне следовало пояснить это лучше.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

одна вещь, которая может быть полезна с точки зрения Java для работы с многоуровневым хэш-картой;

Map<String, Object> myMap = new HashMap<String, Object>()

как в java Object является родительским классом для всех, так что передача Object в качестве значения в карте может обслуживать любой уровень карты.

0 голосов
/ 19 декабря 2018

Я всегда использую Json для Kotlin Class Plugin

Json для Kotlin Class - это плагин, который облегчает создание POJO из файла json, и он решит вашу проблему при создании ваших данныхклассы.

Вы можете увидеть использование в этом GIF:

Json to Kotlin Class Plugin gif

Вы должны скачать и добавить на свой AndroidStudio или IntelliJ IDE в качестве плагина
Вот ссылка для скачивания ~> Json to Kotlin Class

Это спасает мою жизнь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...