java.lang.ClassCastException:java.lang.Double无法强制转换为java.lang.String

时间:2018-03-13 12:01:37

标签: java android casting

我已经完成了Android中的代码:

List<String> spinnerArray =  new ArrayList<String>();
for (int i = 0; i < items.size(); i++) {
    LinkedTreeMap<String, String> item = (LinkedTreeMap) items.get(i);

    // THIS LINE THROW EXCEPTION
    double d = Double.parseDouble(item.get("id").toString());

    locations.put(Integer.parseInt(item.get("id")), item.get("name"));
    spinnerArray.add(item.get("name"));
}

定义“d”变量时出现错误 奇怪的是,如果我在调试中运行相同的行,我会得到我需要的双值。

更新答案

在调试窗口我有:

items.get(i) = {LinkedTreeMap@5317} size = 5
0 = {LinkedTreeMap$Node@5378} "id" -> "1.0"
    key = "id"
    value = {Double@5384} "1.0"

2 个答案:

答案 0 :(得分:2)

似乎LinkedTreeMap items的类型为[String,Object],而不是[String,String]。

所以你的代码应该是这样的:

LinkedTreeMap<String, Object> item = (LinkedTreeMap) items.get(i);

感谢Timothy Truckle。

答案 1 :(得分:1)

您的问题的长期解决方案是定义自定义类以用作数据传输对象(DTO),您可以在其中访问类型安全中的项属性方式:

class Item {
   private double id;
   private String name;
   public void setId(double id){this.id=id;}
   public double getId(){ return id;}
   public void setName(String name){this.name = name;}
   public String getName(){return name;}
}

用法:

for (int i = 0; i < items.size(); i++) {
    Item item = (LinkedTreeMap) items.get(i);

    // THIS LINE THROW EXCEPTION
    double d = item.getId();

    locations.put((int)item.getId(), item.getName());