Cómo resolver SaxParserException en android

Estoy usando el siguiente código pero obtengo saxparserexception. como resolverlo. cuando estoy usando el siguiente código, dará la siguiente excepción.

org.xml.sax.SAXParseException: referencia de entidad no terminada (posición: ENTITY_REF &@1:799 en java.io.InputStreamReader@406cdeb0)

como solucionarlo por favor que alguien me ayude.

*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();
    }
}

}*

preguntado el 27 de julio de 12 a las 20:07

Probablemente hay un error en XML, deberías comprobarlo. -

cuando doy la url en el navegador, dará la ubicación correcta entre dos puntos. pero dando una excepción en la línea doc = db.parse(urlConnection.getInputStream()); -

2 Respuestas

Probablemente el problema esté relacionado con la eliminación de los datos kml antiguos para recuperar la información del mapa de Google.

¿Por qué ya no funciona la recuperación de Google Directions para Android con datos KML?

contestado el 23 de mayo de 17 a las 13:05

necesita pasar url en lugar de urlConnection y luego usar openStream en él:

doc = db.parse(url.openStream());

Respondido 28 Jul 12, 07:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.