2012-07-29 15 views
5

Uso la rotta della mappa di google per la mia applicazione Android. 2 giorni fa ha funzionato bene, ma dopo di ciò quando l'applicazione viene eseguita mi dà errori tramite logcat. Qualunque organismo può dirmi una ragione e una soluzione per questo problema.Errore di riferimento entità non terminata

org.xml.sax.SAXParseException: unterminated entity ref (position:ENTITY_REF &@1:799 in [email protected]) 

private String[] getDirectionData(String sourceLat, String sourceLong, String destinationLat, String destinationLong) { 


String urlString = "http://maps.google.com/maps?f=d&hl=en&" +"saddr="+sourceLat+","+sourceLong+"&daddr="+destinationLat+","+destinationLong + "&ie=UTF8&0&om=0&output=kml"; 
Log.d("URL", urlString); 
Document doc = null; 
HttpURLConnection urlConnection = null; 
URL url = null; 
String pathConent = ""; 

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

} catch (Exception e) { 

    Log.w("Error in google map",e); 
} 

NodeList nl = doc.getElementsByTagName("LineString"); 
for (int s = 0; s < nl.getLength(); s++) { 
    Node rootNode = nl.item(s); 
    NodeList configItems = rootNode.getChildNodes(); 
    for (int x = 0; x < configItems.getLength(); x++) { 
    Node lineStringNode = configItems.item(x); 
    NodeList path = lineStringNode.getChildNodes(); 
    pathConent = path.item(0).getNodeValue(); 
    } 
} 
String[] tempContent = pathConent.split(" "); 
return tempContent; 
} 
+0

aggiungere un po 'di codice e l'indirizzo immagine alla tua domanda – hasanghaforian

+0

oh, ha trovato risposta perfetta in questo forum [link alla risposta corrispondenza] [1] [1]: http://stackoverflow.com/questions/11745314/why-retrieving-google-directions -per-android-using-kml-data-is-not-working-anymo – 2red13

risposta

0

Il messaggio di errore è abbastanza suggestivo: Il tag ref è terminato, per esempio il <ref> non ha una coppia </ref> allegata. Convalida il tuo input XML con uno strumento come this.

+1

non utile, il problema è chiaro, ma la risposta è convalidata da google e il codice è davvero non funziona da giugno. Sto cercando lo stesso numero – 2red13

+0

@ 2red13 che cosa pensi della mia risposta? – 10101010

1

Non lo so, ma penso sia perché output = kml non è più disponibile, molti utenti hanno problemi con esso.

+0

http://stackoverflow.com/questions/11745314/why-retrieving-google-directions-for-android-using-kml-data-is-not-working-anymo – 2red13

+0

se si scrive un collegamento nel browser, il kml la cosa funziona semplicemente bene. Questo suggerisce che c'è qualche problema con la codifica. Sto affrontando lo stesso problema, stesso codice, ma non ero sicuro se avesse dato un risultato qualche giorno prima. – 10101010

0

Ero di fronte allo stesso problema. Questa eccezione sta arrivando perché alcuni importanti elementi KML sono stati deprecati recentemente da google. Ad esempio, fare riferimento a GeometryCollection. Se il codice cerca di trovare tali elementi nel documento ricevuto, potrebbe lanciare un SAXParseException: ref entità non terminata.

Hanno introdotto una nuova API per Maps. È disponibile here.

Io stesso ho scaricato il file kml e l'ho memorizzato nel dispositivo. Quando ho dato un'occhiata allo usando l'editor, non ho trovato l'elemento che il mio codice cercava. Tuttavia, se si utilizza il file kml per trovare una rotta nell'ultima versione di Chrome, funziona.

7

Nel mio caso questo problema è apparso su un file .png all'interno della cartella/res/drawable. È un bug ed è stato segnalato here. Quindi, per riferimento futuro, se si è di fronte a un drawable, verificarlo. Per riassumere, aggiorna il tuo ADT almeno alla versione 21.0.1.

+9

Il problema può essere risolto pulendo la build del progetto (Progetto | Pulisci ... | e selezionando il progetto da pulire). – Aryo

+0

Grazie mi ha aiutato. Se il progetto pulito non funziona, prova ad aprire un file .png facendo clic con il pulsante destro del mouse e scegliere "Apri con - Editor posto". Dopo aver chiuso la finestra dell'editor, gli errori sono andati. –

0

Ho avuto lo stesso problema. Era in un file di immagine .png. Il problema si è verificato dopo aver modificato il file. Ho cercato la soluzione, ma dopo ho pulito il mio progetto usando l'opzione "clean .." nella scheda "project". Così alla fine mi sono liberato di quel "

2

ho incontrato lo stesso problema. Dopo il debug, ho scoperto che è stato causato dal '&' carattere. Dovrebbe essere sfuggito

+0

Ho avuto lo stesso problema, sostituisco & per & nel mio xml risolto, grazie –

+0

Quando non sto pubblicando una stringa con "&" tutto va bene. Il mio problema è come faccio a sfuggire al personaggio in java prima di inviare la richiesta. – TWeeKeD

Problemi correlati