2012-07-27 61 views
1

我正在使用下面的代碼,但得到saxparserexception。如何解決它。當我使用下面的代碼時,它會給出以下例外。如何解決Android中的SaxParserException

org.xml.sax.SAXParseException:未結束的實體REF(位置:ENTITY_REF & @ 1:799 [email protected]

如何解決它,請幫助我的人。

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

} *

+0

可能是XML中有錯誤,您應該檢查它。 – Egor 2012-07-27 20:32:58

+0

當我在瀏覽器中給出url時,它會給出兩點之間的正確位置。但在doc = db.parse(urlConnection.getInputStream()); – Ajinkya 2012-07-27 21:19:05

+0

是否解決了我的問題? – 2012-08-22 12:08:30

回答

0

u需要通過URL來代替URLConnection的,然後在其上使用的OpenStream:

doc = db.parse(url.openStream()); 
相關問題