尝试将String解析为Double时出错

时间:2012-06-04 06:25:29

标签: java android android-maps

我有一个像这样的字符串

106.826820,-6.303850,0

我从解析谷歌地图KML文档得到的。 现在我想把它的字符串解析为Double 这是我的代码:

public Double getLatitude(){
    for(int posisi = GPS_NAME.indexOf(","); posisi > GPS_NAME.length(); posisi++){
        TEMP_LAT = "" + GPS_NAME.indexOf(posisi);
    }
    GPS_LATITUDE = Double.valueOf(TEMP_LAT);

    return GPS_LATITUDE;
}

public Double getLongitude(){
    int posisiakhir = GPS_NAME.indexOf(",");
    for(int i = 0; i < posisiakhir; i++){
        TEMP_LON = "" + GPS_NAME.indexOf(i);
    }
    GPS_LONGITUDE = Double.valueOf(TEMP_LON);

    return GPS_LONGITUDE;
}

但是当我尝试运行它时,我得到了这样的错误 enter image description here

有人可以帮助我解决我的问题&gt; _&lt;

4 个答案:

答案 0 :(得分:2)

并确认GPS_LATITUDE = Double.valueOf(TEMP_LAT); TEMP_LAT在那里不为空 - 因为NullPointerException异常,而不是NumberFormatException。

答案 1 :(得分:2)

你有空指针异常所以你应该像这样:

public Double getLatitude(){
    for(int posisi = GPS_NAME.indexOf(","); posisi > GPS_NAME.length(); posisi++){
        TEMP_LAT = "" + GPS_NAME.indexOf(posisi);
    }
    if (TEMP_LAT != null) {
       GPS_LATITUDE = Double.parseDouble(TEMP_LAT);
    }

    return GPS_LATITUDE;
}

要转换为双倍,您应该使用Double.parseDouble(),或者也可以使用new Double(TEMP_LAT).doubleValue(),但第一种方法更清晰。

答案 2 :(得分:1)

除了NPE的可能原因外,我并没有真正得到你的逻辑;它对我来说看起来很狡猾。

只是一些例子:

GPS_NAME.indexOf(",")将返回-1或小于正在搜索的字符串长度的索引。那么为什么有条件检查它是否大于长度? posisi > GPS_NAME.length()将永远不会成立,因此for循环无用......

然后在循环内部执行TEMP_LAT = "" + GPS_NAME.indexOf(posisi)。从前面的评论中我们知道posisi-1或其他一些小于字符串长度的数字。所以GPS_NAME.indexOf(posisi)将尝试在字符串中找到由整数posisi(这将是一个相当小的数字)重复的字符。这有什么意义呢?

我建议你重新考虑一下你的逻辑 - 或许String.split(",")是一个很好的起点。

答案 3 :(得分:0)

使用Double.parseDouble(TEMP_LAT);

相关问题