- Forum-Beiträge: 636
26.03.2012, 21:22:51 via Website
26.03.2012 21:22:51 via Website
da im Forum gefühlt jede Woche 10 mal gefragt wird: "Wie lade ich eine Website via HttpURLConnection?" oder so etwas wie: "Was mache ich beim Laden via HttpURLConnection falsch?", habe ich das einfach mal hier gepostet.
Die beiden Methoden sind rudimentär und machen das nötigste. Sollten hier Verbesserungen oder Erweiterungen eingefügt werden, einfach Posten und dann werde ich das nachhalten.
Anmerkung:
HttpURLConnection kann man direkt verwenden muss man aber nicht. Einige sehr gute http libs habe ich unten verlinkt.
2 * Lädt anhand der übergebenen URL die Seite und gibt den Inhalt als java.lang.String zurück
3 * @param websiteUrl Url zur Webseite, welchen den Content enthält
4 * @return In Inhalt der Webseite als java.lang.String
5 */
6 private String ladeWebsite(final String websiteUrl)
7 {
8 HttpURLConnection urlConnection = null;
9
10 try
11 {
12 final URL url = new URL(websiteUrl);
13 urlConnection = (HttpURLConnection) url.openConnection();
14 final InputStream result = new BufferedInputStream(urlConnection.getInputStream());
15
16 return readStream(result);
17 }
18 catch (MalformedURLException e)
19 {
20 Log.e("MY_TAG", e.getMessage());
21 }
22 catch (IOException e)
23 {
24 Log.e("MY_TAG", e.getMessage());
25 }
26 finally
27 {
28 if ( null != urlConnection )
29 {
30 urlConnection.disconnect();
31 }
32 }
33
34 return null;
35 }
36
37 /**
38 * Hier wird ein beliebiger in ein String umgewandelt.
39 * @param in InputStream, welcher die Daten zum Umwandeln enthält.
40 * @return Die Daten aus dem InputStream als java.lang.String.
41 * @throws IOException Exception, welchem beim Umwandeln auf treten kann.
42 */
43 private String readStream(final InputStream in) throws IOException
44 {
45 final BufferedReader reader = new BufferedReader(new InputStreamReader(in), 4096);
46 final StringBuilder result = new StringBuilder();
47
48 String line;
49 while ((line = reader.readLine()) != null)
50 {
51 result.append(line);
52 }
53 reader.close();
54
55 return result.toString();
56 }
Seit Android 3.0 (API level 11) ist es nicht mehr gestattet das Netzwerkzugriffe im UI-Thread ausgeführt werden. Somit muss diese Kommunikation in einen Thread, AsyncTask, Services usw. ausgelagert werden.
**update**
Hier ein paar sehr gute libs um http einfacher zu handeln. Je nachdem wie weit man das Problem abstrahieren möchte:
OkHttp
Android async http
volley
AndroidAsync
ion
Ich hab die alle mal genutzt und bin damit immer gut gefahren. Wobei mein Favorit aktuell Android async http ist (Bald auch in Kombination mit OkHttp).
Gruß,
Markus
— geändert am 02.12.2013, 09:36:29
http://nsainsbury.svbtle.com/java-developers
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.