Как получить обе пары ключ / значение из Map в TextView - PullRequest
0 голосов
/ 16 декабря 2018

Я создаю приложение для Android для управления конфигурацией бармена, работающего с RPI

Я хочу показать все текущие напитки и их ингредиенты в виде списка.

Вот ответ Json, который я получаю с сервера:

    [  
{  
    "name":"Rum & Coke",
    "ingredients":{  
        "rum":50,
        "coke":150
    }
},
{  
    "name":"Gin & Tonic",
    "ingredients":{  
        "tonic":10,
        "gin":10
    }
},
{  
    "name":"Long Island",
    "ingredients":{  
        "tequila":15,
        "oj":30,
        "rum":15,
        "vodka":15,
        "coke":100,
        "gin":15
    }
},
{  
    "name":"Screwdriver",
    "ingredients":{  
        "vodka":50,
        "oj":150
    }
},
{  
    "name":"Margarita",
    "ingredients":{  
        "mmix":150,
        "tequila":50
    }
},
{  
    "name":"Gin & Juice",
    "ingredients":{  
        "oj":150,
        "gin":50
    }
},
{  
    "name":"Tequila Sunrise",
    "ingredients":{  
        "tequila":50,
        "oj":150
    }
}
]

А вот класс Drink.1008 *

public class Drink {
    @SerializedName("name")
    private String name;
    @SerializedName("ingredients")
    private Map<String, Integer> ingredients;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Map<String, Integer> getIngredients() {
        return ingredients;
    }

    public void setIngredients(Map<String, Integer> ingredients) {
        this.ingredients = ingredients;
    }
}

Прямо сейчас я могу показатьназвание напитка в списке и только второе значение карты с этим оператором for

Drink d = drinksArrayList.get(position);
        System.out.println(d.getIngredients().size());
        for (Map.Entry<String, Integer> ingredient : d.getIngredients().entrySet()) {
            holder.ingredient0.setText(ingredient.getKey());
            holder.ingredient1.setText(Integer.toString(ingredient.getValue()));
        }

Этот оператор for выводит кокс 150 на экран в случае рома и кокса.

Кто-нибудь понял, как правильно сериализовать этот Json и распечатать его в виде списка?

1 Ответ

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

Похоже, что json DEserialized правильно, но вы используете неправильные поля для заполнения TextViews.Вы должны использовать getName для названия, то есть "Ром и кока-кола", а затем объединить карту, чтобы получить список ингредиентов.

Я думаю, что вы хотите сделать что-то вроде этого:

Drink d = drinksArrayList.get(position);
holder.ingredient0.setText(d.getName()));
StringBuilder ingredients = new StringBuilder();
for (Map.Entry<String, Integer> ingredient : d.getIngredients().entrySet()) {
    ingredients.append(" ");
    ingredients.append(ingredient.getKey());
    ingredients.append(", ");
    ingredients.append(Integer.toString(ingredient.getValue()));
    ingredients.append("\n");
}
holder.ingredient1.setText(ingredients.toString().trim());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...