2010-05-27 14 views
35

Tengo un archivo de texto en mi servidor. Quiero abrir el archivo de texto desde mi aplicación de Android y luego mostrar el texto en un TextView. No puedo encontrar ningún ejemplo de cómo hacer una conexión básica a un servidor y alimentar los datos en una cadena.Lectura de archivos de texto del servidor en Android

Cualquier ayuda que pueda proporcionar sería apreciada.

+0

¿Cómo se sirve el archivo de texto en el servidor? A través de HTTP? – aioobe

+0

Sí, si voy a http://www.mysite.com/thefile.txt, puedo ver el texto. En el iPhone, puedo conectarme al archivo y alimentarlo en un String, luego hacer lo que quiera con él. – Chris

Respuesta

54

intente lo siguiente:

try { 
    // Create a URL for the desired page 
    URL url = new URL("mysite.com/thefile.txt"); 

    // Read all the text returned by the server 
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
    String str; 
    while ((str = in.readLine()) != null) { 
     // str is one line of text; readLine() strips the newline character(s) 
    } 
    in.close(); 
} catch (MalformedURLException e) { 
} catch (IOException e) { 
} 

(tomado de Exampledepot: Getting text from URL)

debería funcionar bien en Android.

+2

Nota: Siempre cierre sus 'Elementos cerrajeros' en el bloque' finally' ya que esta es la única manera de asegurarse de que se cierren incluso cuando se lanza una excepción. –

+0

Parece que el comando in.close() también puede arrojar IOException – Kurru

+0

Oye, gracias a que tu código funcionó :) – user1387035

14

Mientras que URL.openStream funcionará, sería mejor utilizar la biblioteca Apache HttpClient que viene con Android para HTTP. Entre otras razones, puede usar codificación de contenido (gzip) con ella, y eso hará que las transferencias de archivos de texto sean mucho más pequeñas (mejor duración de la batería, menos uso de la red) y más rápido.

Existen varias formas de utilizar HttpClient, y existen varios ayudantes para envolver y facilitar las cosas. Consulte esta publicación para obtener más detalles al respecto: Android project using httpclient --> http.client (apache), post/get method (y tenga en cuenta que el HttpHelper que incluí allí sí que usa gzip, aunque no todos lo hacen).

Además, independientemente del método que utilice para recuperar los datos a través de HTTP, querrá usar AysncTask (o Handler) para asegurarse de no bloquear el subproceso de la interfaz de usuario mientras realiza la llamada de red.

Y cuenta que debe casi nunca sólo tiene que utilizar URL.openStream (sin establecer algún tipo de configuración, como los tiempos de espera), aunque muchos ejemplos muestran que, debido a que se bloquee indefinidamente si el servidor no está disponible (por defecto, tiene sin tiempo de espera): URL.openStream() Might Leave You Hanging.

+1

Este es un contestador muy antiguo, el equipo de Android ahora recomienda usar las cosas estándar de java.net. Para una envoltura muy bonita (que maneja los tiempos de espera y MUCHO más) echa un vistazo a HttpRequest de Kevin Sawicki: https://github.com/kevinsawicki/http-request –

+0

La respuesta aceptada aquí arriba es buena, pero aún así tenga mucho cuidado con los tiempos de espera. En ese ejemplo, no se están configurando y url.openStream en el día solía colgar cuando el servidor no respondía (el tiempo de espera predeterminado es/era 0, lo que significa que no se agota el tiempo).El artículo que he vinculado ya no está, pero hay muchos otros que notan lo mismo: https://eventuallyconsistent.net/2011/08/02/working-with-urlconnection-and-timeouts/ –

5

No olvide agregar permisos de Internet al manifiesto al tomar recursos netos: (agregar en manifiesto).

+5

Esto debería ser un comentario – Mangesh