2010-05-27 15 views
35

Ich habe eine Textdatei auf meinem Server. Ich möchte die Textdatei von meiner Android App aus öffnen und den Text dann in einer Textansicht anzeigen. Ich kann keine Beispiele finden, wie man eine grundlegende Verbindung zu einem Server herstellt und die Daten in einen String eingibt.Textdatei vom Server auf Android lesen

Jede Hilfe, die Sie zur Verfügung stellen können, wäre willkommen.

+0

Wie dienen Sie die Textdatei auf dem Server? Über HTTP? – aioobe

+0

Ja, wenn ich auf http://www.mysite.com/thefile.txt gehe, kann ich den Text sehen. Auf dem iPhone kann ich mich mit der Datei verbinden und sie in einen String einspeisen und dann machen, was ich will. – Chris

Antwort

54

Versuchen Sie Folgendes:

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) { 
} 

(entnommen aus Exampledepot: Getting text from URL)

Sollte auch auf Android arbeiten.

+2

Hinweis: Schließen Sie Ihre 'Closeables' immer im 'finally'-Block, da nur so sichergestellt werden kann, dass sie geschlossen werden, auch wenn eine Ausnahme ausgelöst wird. –

+0

Scheint der in.close() Befehl kann auch IOException werfen – Kurru

+0

Hey Thank ur Code arbeitete für mich :) – user1387035

14

Während URL.openStream funktioniert, sollten Sie besser die Apache HttpClient-Bibliothek verwenden, die mit Android für HTTP geliefert wird. Unter anderem können Sie die Inhaltscodierung (gzip) verwenden, wodurch die Übertragung von Textdateien viel kürzer (bessere Akkulaufzeit, geringere Netznutzung) und schneller wird.

Es gibt verschiedene Möglichkeiten, HttpClient zu verwenden, und es gibt mehrere Hilfsprogramme, um Dinge zu verpacken und zu vereinfachen. Sehen Sie diesen Beitrag für weitere Details zu diesem Thema: Android project using httpclient --> http.client (apache), post/get method (und beachten Sie, dass die HttpHelper ich dort gzip verwendet, obwohl nicht alle tun).

Unabhängig davon, welche Methode Sie zum Abrufen der Daten über HTTP verwenden, sollten Sie AysncTask (oder Handler) verwenden, um sicherzustellen, dass der UI-Thread beim Netzwerkanruf nicht blockiert wird.

Und beachten Sie, dass Sie so ziemlich nie nur URL.openStream verwenden sollten (ohne einige Einstellungen wie Timeouts vorzunehmen), obwohl viele Beispiele zeigen, dass es unbegrenzt blockiert, wenn der Server nicht verfügbar ist (standardmäßig keine Zeitüberschreitung): URL.openStream() Might Leave You Hanging.

+1

Dies ist ein sehr alter Beantworter, das Android-Team empfiehlt nun, den Standard java.net-Kram zu verwenden. Für einen wirklich netten Wrapper drumherum (das die Timeouts und eine Menge mehr behandelt) check out Kevin Sawicki HttpRequest: https://github.com/kevinsawicki/http-request –

+0

Die angenommene Antwort hier oben ist gut, aber ich würde immer noch Seien Sie vorsichtig bei den Timeouts. In diesem Beispiel werden sie nicht gesetzt und url.openStream zurück an dem Tag verwendet, um einfach zu hängen, wenn der Server nicht reagierte (das Standard-Timeout ist/war 0, was bedeutet, dass kein Timeout auftritt).Der Artikel, den ich verlinkt habe, ist weg, aber es gibt viele andere, die dasselbe bemerken: https://eventuallyconsistent.net/2011/08/02/working-with-urlconnection-and-timeouts/ –

5

Vergessen Sie nicht, Internet-Berechtigungen zu dem Manifest hinzuzufügen, wenn Sie Nettoressourcen verwenden: (in Manifest hinzufügen).

+5

Dies sollte ein Kommentar sein – Mangesh