NumberFormatException при разборе строки на плавающую для строки рейтинга? - PullRequest
1 голос
/ 01 апреля 2012

Я работаю над панелью рейтинга в Android, в которой значение рейтинга берется из веб-службы.Данные, которые я получаю, имеют вид xml следующим образом.

5.0

Во время выборки я анализирую xml и получаю все значения вСтрока.Сейчас я конвертирую значение String в Float для рейтингов, но в то время я получаю NumberFormatException.Я не знаю почему, я проанализировал другие данные из String в Double, но в то время я не получил никакой ошибки, но когда пытаюсь конвертировать из String в Float, я не знаю, почему это вызывает исключение ...

Вот мой пример кода.

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 голосов
/ 01 апреля 2012

Попробуйте присвоить значение, возвращаемое из вывода, переменной, а затем используйте parseFloat

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

float myValue = 0.0f;

myValue = Float.parseFloat(floatValue);
0 голосов
/ 01 апреля 2012

Вместо использования этого

XMLFunctions.getValue(e, "rating")

Используйте это

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

Пояснение: Возможно, в получаемой вами строке есть пробел. Если есть пробел, попробуйте вместо этого использовать метод replace(). Например:

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

Если оба метода не работают, попробуйте распечатать строку, которую вы анализируете, в Float, чтобы проверить, содержит ли она какой-либо другой нечисловой символ или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...