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:
Eigentlich gilt die HttpURLConnection als busted und es sollte HttpClient verwendet werden.
1/**
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 }
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.
Gruß,
Markus
-----
!!! BAZINGA !!!
