![](/img/trans.png)
[英]java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
[英]java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String
我在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"
似乎LinkedTreeMap items
的类型为[String,Object],而不是[String,String]。
所以你的代码应该是这样的:
LinkedTreeMap<String, Object> 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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.