App stürzt ab - BufferedReader?

I

ikg

Neues Mitglied
0
hi zusammen

versuch mich grad an meiner ersten app für android.
sie soll eine csv datei aus dem internet hohlen und auslesen, leider stürzt sie beim klicken auf den button ab.

Code:
public void Akt(View view) throws IOException{
        TextView Test2 = (TextView)findViewById(R.id.aus);
        String datei = null;
        //String csvSplitBy = ",";
        //http://download.finance.yahoo.com/d/quotes.csv?s=ADS.DE&f=d1nsabpcm&e=.csv
        String linkTeilA ="http://download.finance.yahoo.com/d/quotes.csv?s=";
        String linkTeilV = "ADS.DE";         
        String linkTeilE = "&f=d1nsabpcm&e=.csv";
        String aktuellDepot = linkTeilA + linkTeilV + linkTeilE;
        
        URL link = new URL(aktuellDepot);
        URLConnection urlConn = link.openConnection();
        
        InputStreamReader csvDatei = new InputStreamReader(
        urlConn.getInputStream());
        BufferedReader csvDateiEinlesen = new BufferedReader(csvDatei);
                
        while ((datei = csvDateiEinlesen.readLine()) != null) {
            
            Test2.setText(datei);
        }
            
            }

logcat gibt mir das wenn ich denn button klick...

Code:
06-30 14:59:10.062: D/libEGL(2362): loaded /system/lib/egl/libEGL_genymotion.so
06-30 14:59:10.062: D/(2362): HostConnection::get() New Host Connection established 0xb834a378, tid 2362
06-30 14:59:10.086: D/libEGL(2362): loaded /system/lib/egl/libGLESv1_CM_genymotion.so
06-30 14:59:10.090: D/libEGL(2362): loaded /system/lib/egl/libGLESv2_genymotion.so
06-30 14:59:10.206: W/EGL_genymotion(2362): eglSurfaceAttrib not implemented
06-30 14:59:10.206: E/OpenGLRenderer(2362): Getting MAX_TEXTURE_SIZE from GradienCache
06-30 14:59:10.222: E/OpenGLRenderer(2362): Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
06-30 14:59:10.222: D/OpenGLRenderer(2362): Enabling debug mode 0
06-30 14:59:30.274: D/AndroidRuntime(2362): Shutting down VM
06-30 14:59:30.274: W/dalvikvm(2362): threadid=1: thread exiting with uncaught exception (group=0xa4ba8648)
06-30 14:59:30.282: E/AndroidRuntime(2362): FATAL EXCEPTION: main
06-30 14:59:30.282: E/AndroidRuntime(2362): java.lang.IllegalStateException: Could not execute method of the activity
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at android.view.View$1.onClick(View.java:3633)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at android.view.View.performClick(View.java:4240)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at android.view.View$PerformClick.run(View.java:17721)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at android.os.Handler.handleCallback(Handler.java:730)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at android.os.Handler.dispatchMessage(Handler.java:92)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at android.os.Looper.loop(Looper.java:137)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at android.app.ActivityThread.main(ActivityThread.java:5103)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at java.lang.reflect.Method.invokeNative(Native Method)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at java.lang.reflect.Method.invoke(Method.java:525)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at dalvik.system.NativeStart.main(Native Method)
06-30 14:59:30.282: E/AndroidRuntime(2362): Caused by: java.lang.reflect.InvocationTargetException
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at java.lang.reflect.Method.invokeNative(Native Method)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at java.lang.reflect.Method.invoke(Method.java:525)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at android.view.View$1.onClick(View.java:3628)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	... 11 more
06-30 14:59:30.282: E/AndroidRuntime(2362): Caused by: android.os.NetworkOnMainThreadException
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at java.net.InetAddress.getAllByName(InetAddress.java:214)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	at in.kgd.ihkboersendepot.MainActivity.Akt(MainActivity.java:36)
06-30 14:59:30.282: E/AndroidRuntime(2362): 	... 14 more


Der ursprüngliche Beitrag von 17:00 Uhr wurde um 17:02 Uhr ergänzt:

kann mir jemand helfen und mir sagen warum die app abstürzt...

danke im voraus für die hilfe
mfg
Ikg
 
hi katyB
danke für die schnelle antwort!werd ich gleich mal ausprobieren :thumbup:
 
hi
hab jetzt ein wenig gelesen und probiert...
denk das hab ich so richtig verstanden...
Code:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    final TextView txtResult = (TextView) findViewById(R.id.tv);
    final Handler myHandler = new Handler();
    
    public void buttonKlick (View view) {
        String result = "TEst";
        new Thread(new Runnable() {
            myHandler.post(new Runnable() {
                public void run() {
                    txtResult.setText(result);
                }
            });
        }).start();
    }
ich erstell einen neuen thread der dann den text in einem view ändern soll.
hab gelesen das thread nicht auf ui elemente zugreifen können und deswegen brauch ich einen handler.

mir wird aber "myHandler" unterstrichen und als fehler makiert.
Syntax error on tokens, AnnotationName expected instead
was mach ich falsch wo ist ein denkfehler?

ok habs so hinbekommen...
Code:
    final Handler h = new Handler();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    public void buttonKlick(View view) {
        Thread t = new Thread(r);
        t.start();
    }

    Runnable r = new Runnable() {
        @Override
        public void run() {
            while (true) {
                h.post(new Runnable() {
                    @Override
                    public void run() {
                        TextView txtResult = (TextView) findViewById(R.id.tv);
                        txtResult.setText("adfasd");

                    }
                });
            }
        }
    };

DANKE
MFG
IKG
 
Zuletzt bearbeitet:
ich hab jetzt eine neue activiti.java und ein layout.xml erstellt.

in der neuen activiti hab ich einen botton der einen neuen thread startet und
von jahoo die csv hollen soll.

leider stürzt die app immer noch ab und ich find keinen fehler oder werd nicht schlau draus :sad::confused2:

Code:
package com.example.appthread;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;

public class Konto_Activity extends Activity {

    final Handler h = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_konto);

    }
    
    public void buttonClickl(View view) {
        if (view.getId() == R.id.buttonKonto) {
            Thread t = new Thread(r);
            t.start();
        }
    }

    Runnable r = new Runnable() {
        @Override
        public void run() {
            while (true) {
                h.post(new Runnable() {
                    @Override
                    public void run() {

                        String datei = null;
                        String datum, name, symbol, ask, bit, vortagW, vortagP, hochTief;
                        String csvSplitBy = ",";
                        String[] wert1 = null;
                        
                        String LinkTeilA = "http://download.finance.yahoo.com/d/quotes.csv?s=";
                        String LinkTeilV = "ADS.DE";
                        String LinkTeilE = "&f=d1nsabpcm&e=.csv";

                        try {
                            String Url = "http://download.finance.yahoo.com/d/quotes.csv?s=ADS.DE&f=d1nsabpcm&e=.csv";
                            URL link = new URL(Url);
                            URLConnection urlConn = link.openConnection();

                            InputStreamReader lineReader = new InputStreamReader(
                                    urlConn.getInputStream());
                            BufferedReader csvDateiEinlesen = new BufferedReader(
                                    lineReader);

                            while ((datei = csvDateiEinlesen.readLine()) != null) {

                                // wert1 = datei.split(csvSplitBy); //ARRAY-8
                                // datum = wert1[0]; // d1
                                // name = wert1[1]; // n
                                // symbol = wert1[2]; // s
                                // ask = wert1[3]; // a
                                // bit = wert1[4]; // b
                                // vortagW = wert1[5]; // p
                                // vortagP = wert1[6]; // c
                                // hochTief = wert1[7]; // m
                                // System.out.println(ask); //
                                // EinArrayWertAuslesen

                                csvDateiEinlesen.close();
                                TextView txtResult = (TextView) findViewById(R.id.tvStatus);
                                txtResult.setText(datei);
                            }
                        } catch (IOException e) {
                        }

                    }
                });
            }
        }
    };

}
hier noch die logcat

07-02 19:44:41.229: E/AndroidRuntime(3981): FATAL EXCEPTION: main
07-02 19:44:41.229: E/AndroidRuntime(3981): android.os.NetworkOnMainThreadException
07-02 19:44:41.229: E/AndroidRuntime(3981): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
07-02 19:44:41.229: E/AndroidRuntime(3981): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
07-02 19:44:41.229: E/AndroidRuntime(3981): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
07-02 19:44:41.229: E/AndroidRuntime(3981): at java.net.InetAddress.getAllByName(InetAddress.java:214)
07-02 19:44:41.229: E/AndroidRuntime(3981): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
07-02 19:44:41.229: E/AndroidRuntime(3981): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
07-02 19:44:41.229: E/AndroidRuntime(3981): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
07-02 19:44:41.229: E/AndroidRuntime(3981): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
07-02 19:44:41.229: E/AndroidRuntime(3981): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
07-02 19:44:41.229: E/AndroidRuntime(3981): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
07-02 19:44:41.229: E/AndroidRuntime(3981): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
07-02 19:44:41.229: E/AndroidRuntime(3981): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
07-02 19:44:41.229: E/AndroidRuntime(3981): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
07-02 19:44:41.229: E/AndroidRuntime(3981): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)
07-02 19:44:41.229: E/AndroidRuntime(3981): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
07-02 19:44:41.229: E/AndroidRuntime(3981): at com.example.appthread.Konto_Activity$1$1.run(Konto_Activity.java:56)
07-02 19:44:41.229: E/AndroidRuntime(3981): at android.os.Handler.handleCallback(Handler.java:730)
07-02 19:44:41.229: E/AndroidRuntime(3981): at android.os.Handler.dispatchMessage(Handler.java:92)
07-02 19:44:41.229: E/AndroidRuntime(3981): at android.os.Looper.loop(Looper.java:137)
07-02 19:44:41.229: E/AndroidRuntime(3981): at android.app.ActivityThread.main(ActivityThread.java:5103)
07-02 19:44:41.229: E/AndroidRuntime(3981): at java.lang.reflect.Method.invokeNative(Native Method)
07-02 19:44:41.229: E/AndroidRuntime(3981): at java.lang.reflect.Method.invoke(Method.java:525)
07-02 19:44:41.229: E/AndroidRuntime(3981): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-02 19:44:41.229: E/AndroidRuntime(3981): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-02 19:44:41.229: E/AndroidRuntime(3981): at dalvik.system.NativeStart.main(Native Method)
07-02 19:44:43.893: E/OpenGLRenderer(4027): Getting MAX_TEXTURE_SIZE from GradienCache
07-02 19:44:43.901: E/OpenGLRenderer(4027): Getting MAX_TEXTURE_SIZE from Caches::initConstraints()


wieso hab ich da immer noch die android.os.NetworkOnMainThreadException ????

schönen abend noch
mfg
ikg
 
hi

kannst du da mal ein kurzes beispiel geben wie ich da einen thread mit aufbau der dann aus dem netz eine .txt egal herunterläd?

versteh den aufbau irgendwie nicht ganz ... sorry fang erst an mit java und android.

Danke :thumbsup:
 
Ich habe schonmal eine fertige klasse gepostet klick

zur Erläuterung: Ich bin kein Fan von anonymen Klassen, besonders wenn es möglich ist, dass man etwas vergleichbares nochmal woanders braucht.

Also machst du am besten klassen, eine mit der Activity und eine mit dem AsyncTask. Beim AsyncTask musst du drei Datentypen in <> mitgeben. Der erste definiert den Datentyp für die übergebenen Parameter beim Start, der zweite für die Parameter beim ProgressUpdate und der letzte für die Parameter beim Ende. In meinem Beispiel sind das alles Strings.

in die doInBackground Methode soll der auszuführende Code rein (in meinem Beispiel eine Verbindung aufbauen und anschließend einen Download durchführen.

in die onProgressUpdate kommt der Code rein, der ausgeführt wird, wenn in der doInBackground publishProgress aufgerufen wird.

in die onPostExecute kommt der Code rein, der nach einem return in der doInBackground methode ausgeführt werden soll.

Ich hoffe, dass hat dir gehoflen, den AsyncTask etwas besser zu verstehen.
 
hi zusammen

hat bischen gedauert bis ich das beispiel verstanden hab und noch länger für ein dickes DANKE euch...!


Danke kosmus für die erklärung und das ausführliche beispiel...selbst mit wenig ahnung ist es super beschrieben und funktioniert 1 a ;)

mfg
ikg
 

Ähnliche Themen

S
Antworten
8
Aufrufe
512
swa00
swa00
Manny87
  • Manny87
Antworten
11
Aufrufe
166
swa00
swa00
R
  • Robby1950
2
Antworten
23
Aufrufe
1.022
Robby1950
R
Zurück
Oben Unten