【问题标题】:java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Stringjava.lang.ClassCastException:java.lang.Double 不能转换为 java.lang.String
【发布时间】:2018-03-13 12:01:36
【问题描述】:

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

【问题讨论】:

  • 如果我错了,请纠正我,但是 item.get("id") 会返回一个 String 那么为什么要使用 .toString() 呢?
  • 你不需要toString()。另外,它是双精度数还是整数?你解析了两次 ID
  • 尝试一切 :( 我已经尝试不使用 .ToString() 并且出现错误,所以我尝试使用 .ToString()
  • 请将堆栈跟踪添加到问题中
  • 唯一的转换发生在 (LinkedTreeMap) items.get(i) 。物品包含什么?

标签: java android casting


【解决方案1】:

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

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

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

感谢蒂莫西·特拉克尔。

【讨论】:

  • 关闭,但 OP 误用地图作为“自定义对象类型”,因此不同的键具有不同的值类型。因此item 必须是LinkedTreeMap&lt;String, Object&gt;
【解决方案2】:

您的问题的长期解决方案是定义一个 自定义类 用作 数据传输对象 (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());

【讨论】:

    猜你喜欢
    • 2018-02-10
    • 2015-05-18
    • 2011-10-27
    • 2019-10-19
    • 2018-01-23
    • 2011-05-09
    • 2014-06-24
    • 2013-08-27
    • 2018-05-17
    相关资源
    最近更新 更多