将字符串解析为要评级栏的浮点数中的NumberFormatException?

时间:2012-04-01 03:53:24

标签: android floating-point numberformatexception

我正在使用Android中的评分栏,其中评级的值是从Web服务获取的。我得到的数据是像这样的xml形式。

5.0

在获取时我正在解析xml并获取String中的所有值。现在我将String的值转换为Float for Ratings,但那时我得到了NumberFormatException。我不知道为什么,我已经解析了从String到Double的其他数据,但我当时没有得到任何错误但是当我尝试从String转换为Float时我不知道为什么它会抛出异常... < / p>

这是我的示例代码。

ArrayList<HashMap<String, Object>> mylist = new ArrayList<HashMap<String, Object>>();

try {
//Get the xml string from the server
xml = XMLFunctions.getXML(url);
doc = XMLFunctions.XMLfromString(xml);
nodes = doc.getElementsByTagName("result");
for (int i = 0; i < nodes.getLength(); i++) {
    HashMap<String, Object> map = new HashMap<String, Object>();
    Element e = (Element)nodes.item(i);
    map.put(Constants.NAME, XMLFunctions.getValue(e, "name"));
    System.out.println("Rating = " + XMLFunctions.getValue(e, "rating"));
    map.put(Constants.RATING, (Float.parseFloat(XMLFunctions.getValue(e, "rating"))));
    mylist.add(map);
}

另一个尝试: -

String ratingValue = XMLFunctions.getValue(e, "rating");
System.out.println(ratingValue);// it gives me 5.0
float myRating = 0.0f;
myRating = Float.parseFloat(ratingValue); // getting exception here
System.out.println("Rating = **" + myRating + "**");//it gives me Rating = **5.0**

错误日志: -

04-01 08:44:59.986: I/System.out(382): Rating = 5.0
04-01 08:45:00.056: W/System.err(382): java.lang.NumberFormatException: 
04-01 08:45:00.056: W/System.err(382):  at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:305)
04-01 08:45:00.065: W/System.err(382):  at java.lang.Float.parseFloat(Float.java:323)
04-01 08:45:00.065: W/System.err(382):  at place.locator.PlaceLocatorActivity$ParseXMLData.doInBackground(PlaceLocatorActivity.java:173)
04-01 08:45:00.065: W/System.err(382):  at place.locator.PlaceLocatorActivity$ParseXMLData.doInBackground(PlaceLocatorActivity.java:1)
04-01 08:45:00.065: W/System.err(382):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-01 08:45:00.065: W/System.err(382):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
04-01 08:45:00.065: W/System.err(382):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
04-01 08:45:00.065: W/System.err(382):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
04-01 08:45:00.065: W/System.err(382):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
04-01 08:45:00.065: W/System.err(382):  at java.lang.Thread.run(Thread.java:1019)

我不知道我在哪里弄错了。如果有人能发现它,请告诉我。我知道这肯定是一些愚蠢的错误,但有些人却无法发现它。

由于

2 个答案:

答案 0 :(得分:0)

而不是使用此

XMLFunctions.getValue(e, "rating")

使用此

XMLFunctions.getValue(e, "rating").trim()

<强>说明: 你得到的字符串中可能有尾随的空白区域。如果还有前导空格,请尝试使用replace()方法。例如:

XMLFunctions.getValue(e, "rating").replace(" ","")

如果两种方法都不起作用,请尝试将要解析的字符串打印到Float,以检查它是否包含任何其他非数字字符。

答案 1 :(得分:0)

尝试将输出返回的值赋给变量,然后使用parseFloat

String floatValue = XMLFunctions.getValue(e, "rating");

float myValue = 0.0f;

myValue = Float.parseFloat(floatValue);