Inhalt einer Textdatei aus dem Web in eine Variable lesen

  • Antworten:4
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 6

12.01.2017 11:57:59 via Website

Hallo zusammen,

eins vorweg: Ich bin Android-Neuling und versuche mich gerade in die Android-Entwicklung einzuarbeiten. Java als Sprache kann ich einigermaßen.

Im Moment versuche ich, den Inhalt einer Textdatei aus dem Web in eine Variable zu lesen. Das klappt aber irgendwie nicht so. Mein Code:

URL urlObj = new URL("h t t p ://example.com/file.txt");
        HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection();
        InputStream is = urlConnection.getInputStream();

        BufferedReader r = new BufferedReader(new InputStreamReader(is));
        StringBuilder total = new StringBuilder();
        String line;
        while ((line = r.readLine()) != null) {
            total.append(line + "\n");
        }

Leider crasht die App in der Zeile 3 (InputStream is = urlConnection.getInputStream();) und ich weiß nicht warum. Kann mir da jemand helfen? :/

Danke! :)

  • Forum-Beiträge: 6

12.01.2017 12:39:00 via Website

Hallo Pascal,

Danke! :)

Ich habe mal den Code aus deinem Link probiert. Fehlermeldung im Log ist ähnlich:

01/12 12:28:13: Launching app
Cold swapped changes.
$ adb shell am start -n "com.example.malifoodnew/com.example.malifoodnew.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 4750 on device emulator-5554
E/libprocessgroup: failed to make and chown /acct/uid_10059: Read-only file system
W/Zygote: createProcessGroup failed, kernel missing CONFIG_CGROUP_CPUACCT?
I/art: Not late-enabling -Xcheck:jni (already on)
I/InstantRun: Instant Run Runtime started. Android package is com.example.malifoodnew, real application class is null.
W/art: Failed to find OatDexFile for DexFile /data/data/com.example.malifoodnew/files/instant-run/dex/slice-slice_0-classes.dex ( canonical path /data/data/com.example.malifoodnew/files/instant-run/dex/slice-slice_0-classes.dex) with checksum 0x19652bc5 in OatFile /data/data/com.example.malifoodnew/cache/slice-slice_0-classes.dex
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

[ 01-12 11:08:11.195  4750: 4750 D/         ]
HostConnection::get() New Host Connection established 0xb42e9cd0, tid 4750
D/Atlas: Validating map...
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Enabling debug mode 0
W/EGL_emulation: eglSurfaceAttrib not implemented
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xb4340c80, error=EGL_SUCCESS
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.malifoodnew, PID: 4750
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.malifoodnew/com.example.malifoodnew.DisplayMessageActivity}: android.os.NetworkOnMainThreadException
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                      at android.app.ActivityThread.access$800(ActivityThread.java:151)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5254)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                   Caused by: android.os.NetworkOnMainThreadException
                      at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
                      at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
                      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
                      at java.net.InetAddress.getAllByName(InetAddress.java:215)
                      at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:142)
                      at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)
                      at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)
                      at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365)
                      at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
                      at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
                      at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
                      at com.example.malifoodnew.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:50)
                      at android.app.Activity.performCreate(Activity.java:5990)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5254) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
Application terminated.

Ich nutze zur Ausführung die VM von Android Studio, daher verstehe ich die Meldung mit Read-Only Filesystem nicht. Permissions sollten in diesem Fall doch keine weiter gesetzt werden müssen, oder (innerhalb der VM)?

Imports sollten auch nicht fehlen, zumindest meckert AS nicht rum ;)
Allerdings scheint diese Methode veraltet zu sein: h t t p ://fs5.directupload.net/images/170112/p2d396fa.jpg

  • Forum-Beiträge: 6

12.01.2017 17:47:39 via Website

Das ist es, Danke! :) Ich probiere das mal aus! :)

Dankeschön! =)

// Jap, das hat den Fehler ausgelöst. Ich habe jetzt verstanden, wie das mit den Threads funktioniert. Habe auch herausgefunden, dass man darin die UI nicht updaten kann, sondern runOnUiThread() nutzen muss. Uiuiui, aber ich weiß mehr als vorher, danke euch! :)

— geändert am 12.01.2017 18:43:06