Android неизвестное исключение - PullRequest
1 голос
/ 23 августа 2010

У меня есть следующий код, который, если не подключен к Интернету, попадает в ловушку, но вылетает приложение с ошибкой в ​​теме.Есть ли изящный способ обнаружить соединение, или просто игнорировать это?

 try {

        GeoPoint center = myMapView.getMapCenter();
        double minLat = (double) (center.getLatitudeE6() - (myMapView
                .getLatitudeSpan() / 2)) / 1E6;
        double maxLat = (double) (center.getLatitudeE6() + (myMapView
                .getLatitudeSpan() / 2)) / 1E6;
        double minLng = (double) (center.getLongitudeE6() - (myMapView
                .getLongitudeSpan() / 2)) / 1E6;
        double maxLng = (double) (center.getLongitudeE6() + (myMapView
                .getLongitudeSpan() / 2)) / 1E6;

        /* Create a URL we want to load some xml-data from. */
        URL url = new URL(
                "http://www.test.com/feed.asp?maxlat="
                        + Double.toString(maxLat) + "&maxlon="
                        + Double.toString(maxLng) + "&minlat="
                        + Double.toString(minLat) + "&minlon="
                        + Double.toString(minLng));

        /* Get a SAXParser from the SAXPArserFactory. */
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();

        /* Get the XMLReader of the SAXParser we created. */
        XMLReader xr = sp.getXMLReader();
        /* Create a new ContentHandler and apply it to the XML-Reader */
        XMLHandler myXMLHandler = new XMLHandler();
        xr.setContentHandler(myXMLHandler);

        /* Parse the xml-data from our URL. */
        xr.parse(new InputSource(url.openStream()));
        /* Parsing has finished. */

        /* Our ExampleHandler now provides the parsed data to us. */
        /*
         * ParsedExampleDataSet parsedExampleDataSet =
         * myExampleHandler.getParsedData();
         */
        ArrayList<Ship> shipArray = myXMLHandler.getShipArray();
        ArrayList<pfOverlayItem> overArray = myXMLHandler.getOverlayArray();
        mainOverlayArray = overArray;
        pfOverlayItem tempOver = null;

        Drawable marker = null;
        for (int i = 0; i < mainOverlayArray.size(); i++) {
            tempOver = mainOverlayArray.get(i);
            // tempOver.setMarker(getIcon(tempOver.getshipTypeInt()));
            tempOver.setMarker(getPlaneIcon(tempOver.getcourse()));
        }

        sites = new SitesOverlay();

    } catch (Exception e) {
        /* Display any Error to the GUI. */
        Log.e("Error", "Problem processing XML", e);
    }

Ответы [ 3 ]

2 голосов
/ 24 августа 2010

Парсинг XML из потока URL кажется ужасной идеей.Почему вы не получаете поток полностью, а затем анализируете его?

1 голос
/ 23 августа 2010

Я использую это для проверки интернета

/**
 * Checks if we have a valid Internet Connection on the device.
 * @param ctx
 * @return True if device has internet
 *
 * Code from: http://www.androidsnippets.org/snippets/131/
 */
public static boolean haveInternet(Context ctx) {

    NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx
            .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

    if (info == null || !info.isConnected()) {
        return false;
    }
    if (info.isRoaming()) {
        // here is the roaming option you can change it if you want to
        // disable internet while roaming, just return false
        return true;
    }
    return true;
}
0 голосов
/ 14 января 2012

Как уже упоминалось в metric152, новый пользователь может легко пропустить добавление правильных разрешений в манифесте!

В этом случае добавление <uses-permission android:name="android.permission.INTERNET" /> сделало магию для меня!

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