views:

119

answers:

2

I have the following code that if not connected to the internet hits the catch but crashes the app with the error in the subject. Is there a graceful way to detect the connection being up or just ignore this?

 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);
    }
A: 

I use this to check for Internet

/**
 * 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;
}
Pentium10
So wrap this around any code before I call any internet action? Strange it crashes an app though?
Lee Armstrong
There is something else with your code, for that I don't know the solution, but I thought the code might help you in some other way.
Pentium10
+1  A: 
Falmarri
Got any Examples?
Lee Armstrong