【问题标题】:java.util.hashmap cannot be cast to java.util.listjava.util.hashmap 不能转换为 java.util.list
【发布时间】:2013-06-23 12:42:02
【问题描述】:

我正在尝试从具有 1 个键的多个值的哈希图中检索数据并将其设置为列表视图,但我得到错误 java.util.hashmap 无法转换为 java.util.list。 代码如下:

 ListView lv = (ListView)findViewById(R.id.list);
    //hashmap of type  `HashMap<String, List<String>>`
    HashMap<String, List<String>> hm = new HashMap<String, List<String>>();
    List<String> values = new ArrayList<String>();
    for (int i = 0; i < j; i++) {
        values.add(value1);
        values.add(value2);
        hm.put(key, values);
    }

并检索值并放入列表视图

ListAdapter adapter = new SimpleAdapter(
                        MainActivitty.this, (List<? extends Map<String, ?>>) hm,
                        R.layout.list_item, new String[] { key,
                                value1,value2},
                        new int[] { R.id.id, R.id.value1,R.id.value2 });
                // updating listview
                lv.setAdapter(adapter);

我该如何解决这个问题?

【问题讨论】:

    标签: java android hashmap


    【解决方案1】:

    Map 包装在List 中以匹配构造函数SimpleAdapter 的预期类型List&lt;? extends Map&lt;String, ?&gt;

    ListAdapter adapter = new SimpleAdapter(
                            MainActivitty.this, Arrays.asList(hm),
                            R.layout.list_item, new String[] { key,
                            value1,value2},
                            new int[] { R.id.id, R.id.value1,R.id.value2 });
    

    参考这个example

    【解决方案2】:

    您必须更改添加数据的顺序。根据documentation of SimpleAdapter,您必须创建一个地图列表,其中列表的每个条目代表一行数据。映射必须包含列名作为键,列值作为值。

    所以要创建 3 行和 3 列,你可以这样做:

    List<? extends Map<String, ?>> data = new ArrayList<? extends Map<String, ?>>();
    for (int i=0; i < 3; i++) {
      Map<String, String> row = new HashMap<String, String>();
      row.put(key, "key in row " + i);
      row.put(value1, "value1 in row " + i);
      row.put(value2, "value2 in row " + i);
      data.add(row);
    }
    

    然后创建您的 SimpleAdapter 实例:

    ListAdapter adapter = new SimpleAdapter(
                        MainActivitty.this, data,
                        R.layout.list_item, new String[] { key,
                                value1,value2},
                        new int[] { R.id.id, R.id.value1,R.id.value2 });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 2018-05-17
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      相关资源
      最近更新 更多