1

I am using following code but getting saxparserexception. how to resolve it. when i am using following code it will give following exception.

org.xml.sax.SAXParseException: unterminated entity ref (position:ENTITY_REF &@1:799 in java.io.InputStreamReader@406cdeb0)

how to resolve it please someone help me.

*public class MapViewActivity extends MapActivity
{
MapView mapView;
@Override
protected void onCreate(Bundle savedInsatnceState)
{


    super.onCreate(savedInsatnceState);
    setContentView(R.layout.map);

    mapView = (MapView) findViewById(R.id.myMapView1);
    //mapView.setBuiltInZoomControls(true);
    double src_lat = 18.556019;
    double src_long = 73.822283;
    double dest_lat = 18.500487;
    double dest_long = 73.866900;
    GeoPoint srcGeoPoint = new GeoPoint((int) (src_lat * 1E6),
        (int) (src_long * 1E6));
    GeoPoint destGeoPoint = new GeoPoint((int) (dest_lat * 1E6),
            (int) (dest_long * 1E6));
    DrawPath(srcGeoPoint, destGeoPoint, Color.GREEN, mapView);
    mapView.getController().animateTo(srcGeoPoint);
    mapView.getController().setZoom(15);
}
protected boolean isRouteDisplayed() 
{

    return false;
}
private void DrawPath(GeoPoint src, GeoPoint dest, int color,
        MapView mMapView01) {
     System.out.println("in drawPath");
    // connect to map web service
    StringBuilder urlString = new StringBuilder();
    urlString.append("http://maps.google.com/maps?f=d&hl=en");
    urlString.append("&saddr=");// from
    urlString.append(Double.toString((double) src.getLatitudeE6() / 1.0E6));
    urlString.append(",");
    urlString
            .append(Double.toString((double) src.getLongitudeE6() / 1.0E6));
    urlString.append("&daddr=");// to
    urlString
            .append(Double.toString((double) dest.getLatitudeE6() / 1.0E6));
    urlString.append(",");
    urlString.append(Double
            .toString((double) dest.getLongitudeE6() / 1.0E6));
    urlString.append("&ie=UTF8&0&om=0&output=kml");
    Log.d("xxx", "URL=" + urlString.toString());
    // get the kml (XML) doc. And parse it to get the coordinates(direction
    // route).
    Document doc = null;
    HttpURLConnection urlConnection = null;
    URL url = null;
    try {
        url = new URL(urlString.toString());
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("GET");
        urlConnection.setDoOutput(true);
        urlConnection.setDoInput(true);
        urlConnection.connect();

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        doc = db.parse(urlConnection.getInputStream());

        if (doc.getElementsByTagName("GeometryCollection").getLength() > 0) {
            // String path =
            // doc.getElementsByTagName("GeometryCollection").item(0).getFirstChild().getFirstChild().getNodeName();
            String path = doc.getElementsByTagName("GeometryCollection")
                    .item(0).getFirstChild().getFirstChild()
                    .getFirstChild().getNodeValue();
            Log.d("xxx", "path=" + path);
            String[] pairs = path.split(" ");
            String[] lngLat = pairs[0].split(","); // lngLat[0]=longitude
                                                    // lngLat[1]=latitude
                                                    // lngLat[2]=height
            // src
            GeoPoint startGP = new GeoPoint((int) (Double
                    .parseDouble(lngLat[1]) * 1E6), (int) (Double
                    .parseDouble(lngLat[0]) * 1E6));
            mMapView01.getOverlays()
                    .add(new MyOverlay(startGP, startGP, 1));
            GeoPoint gp1;
            GeoPoint gp2 = startGP;
            for (int i = 1; i < pairs.length; i++) // the last one would be
                                                    // crash
            {
                System.out.println("in while");
                lngLat = pairs[i].split(",");
                gp1 = gp2;
                // watch out! For GeoPoint, first:latitude, second:longitude
                gp2 = new GeoPoint(
                        (int) (Double.parseDouble(lngLat[1]) * 1E6),
                        (int) (Double.parseDouble(lngLat[0]) * 1E6));
                mMapView01.getOverlays().add(
                        new MyOverlay(gp1, gp2, 2, color));
                Log.d("xxx", "pair:" + pairs[i]);
            }
            mMapView01.getOverlays().add(new MyOverlay(dest, dest, 3)); // use
                                                                        // the
                                                                        // default
                                                                        // color
        }
    } catch (MalformedURLException e)
    {
        e.printStackTrace();
    } catch (IOException e) 
    {
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    }
}

}*

Ajinkya
  • 1,057
  • 7
  • 18
  • Probably there is an error in XML, you should check it. – Egor Jul 27 '12 at 20:32
  • when i give the url in broweser it will give correct location between two points. but giving exception at line doc = db.parse(urlConnection.getInputStream()); – Ajinkya Jul 27 '12 at 21:19

2 Answers2

0

u need to pass url instead of urlConnection and then use openStream on it:

doc = db.parse(url.openStream());
Vikram Gupta
  • 6,496
  • 5
  • 34
  • 47
0

Probably the problem is related to the removing the old kml data for retrieving map information from Google.

Why retrieving Google Directions for Android using KML data is not working anymore?

Community
  • 1
  • 1
GVillani82
  • 17,196
  • 30
  • 105
  • 172