java.lang.ClassCastException:java.lang.Double不能转换为java.lang.String
我已经完成了Android中的代码: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
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());