【问题标题】:How to get both key/value pairs from Map to TextView如何从 Map 获取两个键/值对到 TextView
【发布时间】:2018-12-16 11:02:27
【问题描述】:

我正在创建一个 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.class

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 并将其打印到列表视图吗?

【问题讨论】:

    标签: java android json dictionary


    【解决方案1】:

    看起来 json 已正确反序列化,但您使用了错误的字段来填充 TextViews。您应该使用 getName 作为名称,即“Rum & Coke”,然后连接地图以获取成分列表。

    我认为你想做这样的事情:

    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());
    

    【讨论】:

      猜你喜欢
      • 2015-02-13
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多