Parse Exception: En la línea 1, columna 0: no se encontró ningún elemento

Tengo un problema extraño. Recibo el error siguiente que causa una fuerza-cierre:

Org.apache.harmony.xml.ExpatParser $ ParseException: En la línea 1, columna 0: no se encuentra ningún elemento en org.apache.harmony.xml.ExpatParser.parseFragment (ExpatParser.java:508) en org.apache.harmony.xml. ExpatParser.parseDocument (ExpatParser.java:467) en org.apache.harmony.xml.ExpatReader.parse (ExpatReader.java:329) en org.apache.harmony.xml.ExpatReader.parse (ExpatReader.java:286)

Después de hacer clic en el botón Cerrar la actividad, la actividad se vuelve a crear y el análisis se completa sin problemas. Estoy usando el siguiente fragmento de código dentro de doInBackground de un AsyncTask:

URL serverAddress = new URL(url[0]); HttpURLConnection connection = (HttpURLConnection) serverAddress.openConnection(); connection.setRequestMethod("GET"); connection.setDoOutput(true); connection.setReadTimeout(10000); connection.connect(); InputStream stream = connection.getInputStream(); SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); xr.parse(new InputSource(stream)); // The line that throws the exception 

¿Por qué la Actividad se cerró y luego se ejecutó sin ningún problema inmediatamente después? ¿Sería un BufferedInputStream diferente? Estoy desconcertado. 🙁

Gracias por su tiempo a todos.

Actualización: Resulta HttpURLConnection.getResponseCode () devuelve -1 de vez en cuando, por lo que el InputStream probablemente no está siendo correctamente establecido.

 HTTPURLConnection connection = (HttpURLConnection) serverAddress.openConnection(); connection.setRequestMethod("GET"); connection.setDoOutput(true); 

Esas líneas son un poco raras. ¿Es HTTPURLConnection o HttpURLConnection ? El método de solicitud predeterminada ya es GET . El setDoOutput(true) lo obligará a POST .

Yo reemplazaría todas esas líneas por

 URLConnection connection = serverAddress.openConnection(); 

Y vuelva a intentarlo. Puede ocurrir que devolvió un error porque forzó POST y no escribió nada en la salida (el cuerpo de la solicitud). El connection.connect() es por cierto ya implicitamente llamado por connection.getInputStream() , por lo que la línea es superflua también.

Actualización : ¿Funciona el siguiente procedimiento para realizar pruebas?

 BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8")); for (String line; (line = reader.readLine()) != null;) { System.out.println(line); } reader.close(); 

No sé si arreglaste esto, pero tuve el mismo problema. Era raro, funcionaría bien en el emulador, pero luego en el teléfono, siempre me estaba dando el error xr.parse() . Incluso cuando InputStream el InputStream me daría salida legítima del documento xml. Parecía que el problema estaba en la creación del objeto InputSource

He aquí cómo lo arreglé: en lugar de utilizar InputStream para crear su fuente de entrada sólo he creado fuente de entrada de la cadena de url directamente.

 InputSource a = new InputSource(url_string); 

Donde url_string es sólo una cadena con tu url. No me pregunte por qué funciona … Realmente no me gusta, ya que no hay manera de comprobar los tiempos muertos y cosas así parece. Pero funciona, déjame saber cómo va!

Por InputStream javadoc el método se bloqueará hasta que los datos estén disponibles o se encuentre el EOF. Por lo tanto, el otro lado de Socket necesita cerrarlo – entonces la llamada inStream.read () volverá.

Si utiliza BufferedReader , puede leerlo de una manera línea por línea. El método readLine() volverá tan pronto como se lea una línea de la respuesta HTTP.

En una nota de diseño relacionada, cargar el contenido de una URL nunca debe forzar una actividad. Recomiendo que coloque todo esto en una implementación de AsyncTask e informe o vuelva a intentarlo después de volver al subproceso de GUI.

Incluso me enfrenté a la misma cuestión. Primero InputStream en Scanner para imprimir el contenido de la misma. Y luego tratando de pasarlo en el analizador de XML.

El problema era que no estaba cerrando el objeto Scanner . Y utilizando el Inputstream en el analizador.

Después de cerrar el objeto de escáner, pude abordar este problema.

Me encontré con el mismo problema y no podía tener sentido de ello porque estaba analizando directamente desde el InputSource. Cuando modifiqué el código para extraer el resultado en una cadena antes del análisis xml, descubrí que el problema era simplemente un nombre de método de servicio web erróneo y que el mensaje de error informado por ese servicio era el asesino.

  • Analizar el feed RSS de Android
  • Ejecutar el comando shell desde android
  • Cómo encontrarViewById () un elemento @android: id / list en una actividad de Android?
  • ¿Por qué no puedo definir atributos de android en el espacio de nombres predeterminado?
  • RecyclerView wrap_content
  • Tamaño máximo al analizar XML con DOM
  • Android xml dibujable imagen en pantalla completa de fondo
  • Android cómo hacer que resalte la vista cuando se hace clic?
  • Android java onClick No se pudo ejecutar el método de la actividad
  • Android - ¿Cómo manejar Webservice en XML?
  • Hacer formas dinámicas (el mejor enfoque)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.