Enfreyer
- Forum-Beiträge: 9
13.12.2012, 01:58:39 via Website
13.12.2012 01:58:39 via Website
Hallo Community,
ich hab ein Problem, was mich nun nach mehr als 10 Stunden so langsam aber sicher in den absoluten Wahnsinn
treibt.
Meine Absicht: Das Ziel einer HTTP URL streamen und in einem String abspeichern.
Das Problem: Ich bekomme IMMER an der Stelle, an der letztlich die Verbindung aufgebaut wird, eine
IllegalStateException. Egal, ob ich es via HTTP oder FTP mache. Egal ob über die Apache.commons.net
oder über java.net. Egal, ob ich mir den Code selbst baue oder Beispielcodes aus dem Web suche (wovon
ich bereits mehr als fünf verschiedene getestet habe). Egal, welche URL ich benutze oder in welchem
Format ich sie übergebe.
Die Permission für die Internetverbindung ist gesetzt (auf meinem Tablet sehe ich es bei der Installation).
Die App schmiert sowohl im Emulator, als auch auf meinem Android 4.03 Tablet ab.
Der letzte Code, den ich benutzt habe, habe ich durch eure Forensuche gefunden (aus diesem Thread:
https://www.nextpit.de/de/android/forum/thread/456651/Load-Website-via-HttpURLConnection).
Eingebaut habe ich ihn mal folgendermaßen:
Der Exception Trace (in der Logcat) sieht folgendermaßen aus:
Die genannte Zeile 47 ist im Code folgende:
Verwendete Bibliotheken:
Android 4.2 (APK 17)
Android-support-v4 (auch im libs-ordner)
Apache.commons.net 3.2 (im Bsp. nicht benutzt)
Apache.commons.io 2.4 (im Bsp. nicht benutzt) (auch im libs-ordner)
Hat jemand eine Idee, was die Ursache für diesen Fehler ist?
Ich verzweifle so langsam...
VG, Enfreyer
ich hab ein Problem, was mich nun nach mehr als 10 Stunden so langsam aber sicher in den absoluten Wahnsinn
treibt.
Meine Absicht: Das Ziel einer HTTP URL streamen und in einem String abspeichern.
Das Problem: Ich bekomme IMMER an der Stelle, an der letztlich die Verbindung aufgebaut wird, eine
IllegalStateException. Egal, ob ich es via HTTP oder FTP mache. Egal ob über die Apache.commons.net
oder über java.net. Egal, ob ich mir den Code selbst baue oder Beispielcodes aus dem Web suche (wovon
ich bereits mehr als fünf verschiedene getestet habe). Egal, welche URL ich benutze oder in welchem
Format ich sie übergebe.
Die Permission für die Internetverbindung ist gesetzt (auf meinem Tablet sehe ich es bei der Installation).
Die App schmiert sowohl im Emulator, als auch auf meinem Android 4.03 Tablet ab.
Der letzte Code, den ich benutzt habe, habe ich durch eure Forensuche gefunden (aus diesem Thread:
https://www.nextpit.de/de/android/forum/thread/456651/Load-Website-via-HttpURLConnection).
Eingebaut habe ich ihn mal folgendermaßen:
1public String button(View view) {
2
3 String websiteUrl = "h t t p:// www. android. com/"; // Die Leerzeichen sind nur hier im Forum, da ich hier keine externen Links benutzen darf
4 HttpURLConnection urlConnection = null;
5 try
6 {
7 final URL url = new URL(websiteUrl);
8 urlConnection = (HttpURLConnection) url.openConnection();
9 final InputStream result = new BufferedInputStream(urlConnection.getInputStream());
10 return readStream(result);
11
12 }
13 catch (MalformedURLException e)
14 {
15 Log.e("MY_TAG", e.getMessage());
16 }
17 catch (IOException e)
18 {
19 Log.e("MY_TAG", e.getMessage()); }
20 finally
21 {
22 if ( null != urlConnection )
23 {
24 urlConnection.disconnect();
25 }
26 }
27 return null;
28 }
29
30 private String readStream(final InputStream in) throws IOException
31 {
32 final BufferedReader reader = new BufferedReader(new InputStreamReader(in), 4096);
33 final StringBuilder result = new StringBuilder();
34
35 String line;
36 while ((line = reader.readLine()) != null)
37 {
38 result.append(line);
39 }
40 reader.close();
41 return result.toString();
42 }
2
3 String websiteUrl = "h t t p:// www. android. com/"; // Die Leerzeichen sind nur hier im Forum, da ich hier keine externen Links benutzen darf
4 HttpURLConnection urlConnection = null;
5 try
6 {
7 final URL url = new URL(websiteUrl);
8 urlConnection = (HttpURLConnection) url.openConnection();
9 final InputStream result = new BufferedInputStream(urlConnection.getInputStream());
10 return readStream(result);
11
12 }
13 catch (MalformedURLException e)
14 {
15 Log.e("MY_TAG", e.getMessage());
16 }
17 catch (IOException e)
18 {
19 Log.e("MY_TAG", e.getMessage()); }
20 finally
21 {
22 if ( null != urlConnection )
23 {
24 urlConnection.disconnect();
25 }
26 }
27 return null;
28 }
29
30 private String readStream(final InputStream in) throws IOException
31 {
32 final BufferedReader reader = new BufferedReader(new InputStreamReader(in), 4096);
33 final StringBuilder result = new StringBuilder();
34
35 String line;
36 while ((line = reader.readLine()) != null)
37 {
38 result.append(line);
39 }
40 reader.close();
41 return result.toString();
42 }
Der Exception Trace (in der Logcat) sieht folgendermaßen aus:
112-13 00:32:07.663: E/AndroidRuntime(1630): FATAL EXCEPTION: main
212-13 00:32:07.663: E/AndroidRuntime(1630): java.lang.IllegalStateException: Could not execute method of the activity
312-13 00:32:07.663: E/AndroidRuntime(1630): at android.view.View$1.onClick(View.java:3044)
412-13 00:32:07.663: E/AndroidRuntime(1630): at android.view.View.performClick(View.java:3511)
512-13 00:32:07.663: E/AndroidRuntime(1630): at android.view.View$PerformClick.run(View.java:14105)
612-13 00:32:07.663: E/AndroidRuntime(1630): at android.os.Handler.handleCallback(Handler.java:605)
712-13 00:32:07.663: E/AndroidRuntime(1630): at android.os.Handler.dispatchMessage(Handler.java:92)
812-13 00:32:07.663: E/AndroidRuntime(1630): at android.os.Looper.loop(Looper.java:137)
912-13 00:32:07.663: E/AndroidRuntime(1630): at android.app.ActivityThread.main(ActivityThread.java:4424)
1012-13 00:32:07.663: E/AndroidRuntime(1630): at java.lang.reflect.Method.invokeNative(Native Method)
1112-13 00:32:07.663: E/AndroidRuntime(1630): at java.lang.reflect.Method.invoke(Method.java:511)
1212-13 00:32:07.663: E/AndroidRuntime(1630): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
1312-13 00:32:07.663: E/AndroidRuntime(1630): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
1412-13 00:32:07.663: E/AndroidRuntime(1630): at dalvik.system.NativeStart.main(Native Method)
1512-13 00:32:07.663: E/AndroidRuntime(1630): Caused by: java.lang.reflect.InvocationTargetException
1612-13 00:32:07.663: E/AndroidRuntime(1630): at java.lang.reflect.Method.invokeNative(Native Method)
1712-13 00:32:07.663: E/AndroidRuntime(1630): at java.lang.reflect.Method.invoke(Method.java:511)
1812-13 00:32:07.663: E/AndroidRuntime(1630): at android.view.View$1.onClick(View.java:3039)
1912-13 00:32:07.663: E/AndroidRuntime(1630): ... 11 more
2012-13 00:32:07.663: E/AndroidRuntime(1630): Caused by: android.os.NetworkOnMainThreadException
2112-13 00:32:07.663: E/AndroidRuntime(1630): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
2212-13 00:32:07.663: E/AndroidRuntime(1630): at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
2312-13 00:32:07.663: E/AndroidRuntime(1630): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
2412-13 00:32:07.663: E/AndroidRuntime(1630): at java.net.InetAddress.getAllByName(InetAddress.java:220)
2512-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
2612-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
2712-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
2812-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
2912-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
3012-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
3112-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
3212-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
3312-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
3412-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
3512-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
3612-13 00:32:07.663: E/AndroidRuntime(1630): at com.example.httpcon.MainActivity.button(MainActivity.java:47)
3712-13 00:32:07.663: E/AndroidRuntime(1630): ... 14 more
212-13 00:32:07.663: E/AndroidRuntime(1630): java.lang.IllegalStateException: Could not execute method of the activity
312-13 00:32:07.663: E/AndroidRuntime(1630): at android.view.View$1.onClick(View.java:3044)
412-13 00:32:07.663: E/AndroidRuntime(1630): at android.view.View.performClick(View.java:3511)
512-13 00:32:07.663: E/AndroidRuntime(1630): at android.view.View$PerformClick.run(View.java:14105)
612-13 00:32:07.663: E/AndroidRuntime(1630): at android.os.Handler.handleCallback(Handler.java:605)
712-13 00:32:07.663: E/AndroidRuntime(1630): at android.os.Handler.dispatchMessage(Handler.java:92)
812-13 00:32:07.663: E/AndroidRuntime(1630): at android.os.Looper.loop(Looper.java:137)
912-13 00:32:07.663: E/AndroidRuntime(1630): at android.app.ActivityThread.main(ActivityThread.java:4424)
1012-13 00:32:07.663: E/AndroidRuntime(1630): at java.lang.reflect.Method.invokeNative(Native Method)
1112-13 00:32:07.663: E/AndroidRuntime(1630): at java.lang.reflect.Method.invoke(Method.java:511)
1212-13 00:32:07.663: E/AndroidRuntime(1630): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
1312-13 00:32:07.663: E/AndroidRuntime(1630): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
1412-13 00:32:07.663: E/AndroidRuntime(1630): at dalvik.system.NativeStart.main(Native Method)
1512-13 00:32:07.663: E/AndroidRuntime(1630): Caused by: java.lang.reflect.InvocationTargetException
1612-13 00:32:07.663: E/AndroidRuntime(1630): at java.lang.reflect.Method.invokeNative(Native Method)
1712-13 00:32:07.663: E/AndroidRuntime(1630): at java.lang.reflect.Method.invoke(Method.java:511)
1812-13 00:32:07.663: E/AndroidRuntime(1630): at android.view.View$1.onClick(View.java:3039)
1912-13 00:32:07.663: E/AndroidRuntime(1630): ... 11 more
2012-13 00:32:07.663: E/AndroidRuntime(1630): Caused by: android.os.NetworkOnMainThreadException
2112-13 00:32:07.663: E/AndroidRuntime(1630): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
2212-13 00:32:07.663: E/AndroidRuntime(1630): at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
2312-13 00:32:07.663: E/AndroidRuntime(1630): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
2412-13 00:32:07.663: E/AndroidRuntime(1630): at java.net.InetAddress.getAllByName(InetAddress.java:220)
2512-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
2612-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
2712-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
2812-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
2912-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
3012-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
3112-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
3212-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
3312-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
3412-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
3512-13 00:32:07.663: E/AndroidRuntime(1630): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
3612-13 00:32:07.663: E/AndroidRuntime(1630): at com.example.httpcon.MainActivity.button(MainActivity.java:47)
3712-13 00:32:07.663: E/AndroidRuntime(1630): ... 14 more
Die genannte Zeile 47 ist im Code folgende:
1final InputStream result = new BufferedInputStream(urlConnection.getInputStream());
Verwendete Bibliotheken:
Android 4.2 (APK 17)
Android-support-v4 (auch im libs-ordner)
Apache.commons.net 3.2 (im Bsp. nicht benutzt)
Apache.commons.io 2.4 (im Bsp. nicht benutzt) (auch im libs-ordner)
Hat jemand eine Idee, was die Ursache für diesen Fehler ist?
Ich verzweifle so langsam...
VG, Enfreyer
— geändert am 13.12.2012, 02:05:09
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.