Ошибка Java.lang.NumberFormatException: пустая строка - приложение курса обмена - PullRequest
0 голосов
/ 26 июня 2018

Я пишу программу, которая получает ежедневные курсы обмена от http://www.tcmb.gov.tr/kurlar/today.xml и сохраняет их в Список. Вот мой код:

public class ParseTheXml {

    private List<CurrencyPojo> currencyList;


    public void setCurrencyList(List<CurrencyPojo> currencyList) {
        this.currencyList = currencyList;
    }

    public List<CurrencyPojo> getCurrencyList() throws ParserConfigurationException {
        currencyList = new ArrayList<CurrencyPojo>();

        try {
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            URL url = new URL("http://www.tcmb.gov.tr/kurlar/today.xml");
            Document document = builder.parse(url.openStream());

            NodeList nodeList = document.getElementsByTagName("Currency");

            for (int i = 0; i < nodeList.getLength(); i++) { // döngü her currency türü için
                Element element = (Element) nodeList.item(i);
                CurrencyPojo currencyPojoObject = new CurrencyPojo(); 

                currencyPojoObject.setCrossOrder(Integer.parseInt(element.getAttribute("CrossOrder")));
                currencyPojoObject.setKod(element.getAttribute("Kod"));
                currencyPojoObject.setCurrenyCode(element.getAttribute("CurrencyCode"));

                currencyPojoObject.setUnit(Integer.parseInt(element.getElementsByTagName("Unit").item(0).getTextContent()));
                currencyPojoObject.setIsim(element.getElementsByTagName("Isim").item(0).getTextContent());
                currencyPojoObject.setCurrencyName(element.getElementsByTagName("CurrencyName").item(0).getTextContent());
                currencyPojoObject.setForexBuying(Double.parseDouble(element.getElementsByTagName("ForexBuying").item(0).getTextContent()));


       currencyPojoObject.setForexSelling(Double.parseDouble(element.getElementsByTagName("ForexSelling").item(0).getTextContent()));  //  Last 3 codes have Emppty String errors
                currencyPojoObject.setBanknoteBuying(Double.parseDouble(element.getElementsByTagName("BanknoteBuying").item(0).getTextContent()));
                currencyPojoObject.setBanknoteSelling(Double.parseDouble(element.getElementsByTagName("BanknoteSelling").item(0).getTextContent()));

                currencyList.add(currencyPojoObject);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return currencyList;
    } 

При получении значений ForexSelling, BanknoteBuying и Banknote Selling я получаю

java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at javaxmlparseandshow.ParseTheXml.getCurrencyList(ParseTheXml.java:55)
    at javaxmlparseandshow.ParseTheXml.main(ParseTheXml.java:75)

Может кто-нибудь помочь мне исправить это? Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Вы пробовали что-то вроде

String forexStr = element.getElementsByTagName("ForexSelling").item(0).getTextContent();
if( /* forexStr conforms to your criteria like, for example: !forexStr.equals("")*/){
    currencyPojoObject.setForexSelling(Double.parseDouble(forexStr); 
}

0 голосов
/ 26 июня 2018

В качестве альтернативы вы можете установить 0 для пустых строк XML

private double parseDouble(String val){
    if(val== null || val.isEmpty()) 
        return 0.0;
    else
        return Double.parseDouble(val);
}

EX:

currencyPojoObject.setForexSelling(parseDouble(element.getElementsByTagName("ForexSelling").item(0).getTextContent())); 
0 голосов
/ 26 июня 2018

КАК я понял из ошибки трассировки стека, Поле element.getElementsByTagName ("ForexSelling") не содержит данных. Парсер пытается преобразовать пустые данные в строку и выдает ошибку. Посмотрите на xml, вы должны увидеть пустое поле. В качестве решения, я думаю, вам нужно сначала проверить, пустые данные или нет:

...