【问题标题】:NumberFormatException in android, parseDouble GeoPointandroid中的NumberFormatException,parseDouble GeoPoint
【发布时间】:2012-05-23 08:12:27
【问题描述】:

我的安卓应用遇到这个问题

我已经为此苦苦挣扎了一段时间,并且经历了很多类似的线程,但从未真正解决它。我还没有设法自己重新创建崩溃,但我从其他用户那里得到了崩溃报告

这是崩溃报告:

java.lang.NumberFormatException: -
at org.apache.harmony.luni.util.FloatingPointParser.initialParse(FloatingPointParser.java:149)
at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:281)
at java.lang.Double.parseDouble(Double.java:318)
at polis.koll.HelloMapView.loadallmarkers(HelloMapView.java:665)
at polis.koll.HelloMapView.access$10(HelloMapView.java:611)
at polis.koll.HelloMapView$6.run(HelloMapView.java:587)
at java.lang.Thread.run(Thread.java:1027)

这是我的代码,最后一行似乎是生成错误

        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();

        /** Send URL to parse XML Tags */
        URL sourceUrl = new URL(
        "http://www.mysite.com/xml.php");

        /** Create handler to handle XML Tags ( extends DefaultHandler ) */
        MyXMLHandler myXMLHandler = new MyXMLHandler();
        xr.setContentHandler(myXMLHandler);
        xr.parse(new InputSource(sourceUrl.openStream()));
        } catch (Exception e) {
        //System.out.println("XML Pasing Excpetion = " + e);
        }

        sitesList = MyXMLHandler.sitesList;
        gotsnr = "";
        gotmarkers = 0;
        LocationOverlay locationOverlay = new LocationOverlay(mapView, getResources().getDrawable(R.drawable.polis), mContext);

        if (sitesList !=null){
        for (int i = 0; i < sitesList.getSnr().size(); i++) {
        gotsnr = sitesList.getSnr().get(i);
        gotmarkers = (i);
        //if (gotsnr !=""){ 
        if (sitesList.getLat().get(i).equalsIgnoreCase("")||sitesList.getLat().get(i).equalsIgnoreCase(null)){
            // Empty, do nothing

        } else{

        GeoPoint point = new GeoPoint( new Double(Double.parseDouble(sitesList.getLat().get(i)) * 1e6).intValue() , new Double(Double.parseDouble(sitesList.getLng().get(i)) * 1e6).intValue());

* 编辑下方回复@kcoppock

这可以解决问题吗?

double dlat = 0;
double dlng = 0;

            if (sitesList.getLat().get(i) !=null && !"".equals(sitesList.getLat().get(i)) ){
                    try {
                       dlat = Double.parseDouble(sitesList.getLat().get(i));
                    } catch (NumberFormatException e) {
                       //System.out.println(e.getMessage());
                    }
                }
            if (sitesList.getLng().get(i) !=null && !"".equals(sitesList.getLng().get(i)) ){
                try {
                    dlng = Double.parseDouble(sitesList.getLng().get(i));
                } catch (NumberFormatException e) {
                   //System.out.println(e.getMessage());
                }
            }

            if (dlat !=0  && dlng !=0){

            GeoPoint point = new GeoPoint( new Double(dlat * 1e6).intValue() , new Double(dlng * 1e6).intValue());    

【问题讨论】:

    标签: android


    【解决方案1】:

    您一开始就没有处理NumberFormatException,即使您没有崩溃,这也是一种不好的做法。拆分该行,首先解析双打,并确保捕获 NumberFormatException 并适当地处理它(例如,抛出警告对话框,放置默认值等)以防由于某种原因 getLat() 中的值或getLon() 不可解析,这显然是在这些情况下发生的。

    double lat = 0, lng = 0;
    String sLat = sitesList.getLat().get(i);
    String sLng = sitesList.getLng().get(i);
    GeoPoint point;
    
    try {
        lat = Double.parseDouble(sLat);
        lng = Double.parseDouble(sLng);
    
        //If it gets here, they parsed successfully
        point = new GeoPoint((int)(lat * 1e6), (int)(lng * 1e6));
    } catch (NumberFormatException e) {
        Log.e("TAG", "Couldn't parse latitude and/or longitude");
    }
    

    【讨论】:

    • 感谢您的回复@kcoppock!认为你是对的,我在上面编辑了我的帖子,你认为修复应该足够吗?
    • @Jerry:我可能会做类似上面例子的事情(我编辑了一个)。这取决于如果无法解析这些点,该过程是否应该完全失败,或者是否应该发生一些其他逻辑过程。这个例子的方式是,它尝试解析两者,如果其中任何一个失败,它会立即落入 catch 块,并且不执行 new GeoPoint 行。
    • 谢谢 :) 看起来比我的好多了
    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多