java.lang.ClassCastException:java.lang.Double不能转换为java.lang.String

java.lang.ClassCastException:java.lang.Double不能转换为java.lang.String,java,android,casting,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

我已经完成了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"));
}

LinkedTreeMap
项的类型似乎是[String,Object],而不是[String,String]

因此,您的代码应该如下所示:

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

感谢Timothy Truckle。

您的问题的长期解决方案是定义一个自定义类作为数据传输对象(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());
for(int i=0;i
如果我错了,请纠正我,但是,item.get(“id”)将返回一个字符串,那么为什么要使用.toString()?您不需要
toString()
。另外,它是一个双精度还是一个整数?您正在解析id twice以尝试所有操作:(我已经尝试了不使用.toString()的方法,但我得到了错误,所以我尝试了.toString()请将stacktrace添加到问题(LinkedTreeMap)项的唯一转换正在进行。获取(i)。项包含什么?关闭,但OP将映射误用为“自定义对象类型”,因此不同的键具有不同的值类型。因此
item
必须是
LinkedTreeMap
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());