簡體   English   中英

java.lang.ClassCastException:java.lang.Double無法強制轉換為java.lang.String

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM