Webseite auslesen scheitert...

  • 10 Antworten
  • Letztes Antwortdatum
Killerjo96

Killerjo96

Ambitioniertes Mitglied
0
Hallo

ich bin dabei den Text einer Webseite auszulesen, habe mich, falls jemand meckern will auch schon ausreichend informiert, nur will es einfach nicht klappen...CatLog wirft mir einfach nur noch Fehler aus, und ich weiß nicht was sie bedeuten.

Mein Code zum auslesen einer Webseite lautet so:

Code:
URL url = new URL("http://85.214.24.87:85/FTP/Cloud/Privat/Jonas/Genealogie/Request/EntryManager/AddEntry.php?ID=" + num_ID.getText() + "&Name=" + txt_Name.getText() + "&Vorname=" + txt_Vorname.getText() + "&Geburtsdatum=" + txt_Geburtsdatum.getText() + "&Geburtsort=" + txt_Geburtsort.getText() + "&Hochzeitsdatum=" + txt_Hochzeitsdatum.getText() + "&Hochzeitsort=" + txt_Hochzeitsort.getText() + "&Kinder=" + num_Kinder.getText() + "&Sterbedatum=" + txt_Sterbedatum.getText() + "&Sterbeort=" + txt_Sterbeort.getText());
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    try {
                        BufferedReader rd;
                        rd = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                        StringBuffer sb = new StringBuffer();
                        String line;
                        while((line = rd.readLine()) != null) {
                            sb.append(line);
                        }
                        String result = sb.toString(); //result soll den Text enthalten... aber es werden Fehler ausgeworfen, ist an dem Code etwas falsch?
                    } catch (MalformedURLException e) {
                        Toast.makeText(getApplicationContext(), "Fehler bei der Auflösung der URL.", Toast.LENGTH_SHORT).show();
                    }

Ich möchte jetzt wissen, ob der Code so funktionieren kann oder nicht...

Die Permission Internet habe ich in der AndroidManifest schon reingefügt.
Hoffe mir kann jemand helfen.

Lg Johannes
 
Was ist denn die logcat Ausgabe?

Gesendet von meinem GT-S5660 mit der Android-Hilfe.de App
 
LogCat Ausgabe:

Code:
12-28 14:35:28.006: D/libEGL(22272): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
12-28 14:35:28.014: D/libEGL(22272): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
12-28 14:35:28.014: D/libEGL(22272): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
12-28 14:35:28.123: D/OpenGLRenderer(22272): Enabling debug mode 0
12-28 14:35:30.897: D/OpenGLRenderer(22272): Flushing caches (mode 0)
12-28 14:35:33.920: D/ClipboardServiceEx(22272): enter dismissUIDataDialog
12-28 14:35:34.678: D/AndroidRuntime(22272): Shutting down VM
12-28 14:35:34.678: W/dalvikvm(22272): threadid=1: thread exiting with uncaught exception (group=0x40bdc1f8)
12-28 14:35:34.686: E/AndroidRuntime(22272): FATAL EXCEPTION: main
12-28 14:35:34.686: E/AndroidRuntime(22272): android.os.NetworkOnMainThreadException
12-28 14:35:34.686: E/AndroidRuntime(22272):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.io.IoBridge.connect(IoBridge.java:112)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at java.net.Socket.connect(Socket.java:842)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:77)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at de.geartech.genealogie.Activity_NewEntry$1.onClick(Activity_NewEntry.java:50)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at android.view.View.performClick(View.java:3558)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at android.view.View$PerformClick.run(View.java:14152)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at android.os.Handler.handleCallback(Handler.java:605)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at android.os.Looper.loop(Looper.java:137)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at android.app.ActivityThread.main(ActivityThread.java:4514)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at java.lang.reflect.Method.invokeNative(Native Method)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at java.lang.reflect.Method.invoke(Method.java:511)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
12-28 14:35:34.686: E/AndroidRuntime(22272):     at dalvik.system.NativeStart.main(Native Method)
12-28 14:35:34.748: D/dalvikvm(22272): GC_CONCURRENT freed 185K, 5% free 6916K/7239K, paused 3ms+2ms
 
Steht ja da, du musst die Verbindung in einen seperaten Thread auslagern, weil sie im UI Thread nicht zugelassen ist. Schau dir mal den AsyncTask an.
 
Hmm ja, wie gesagt, ich weiß nicht wie ich die LogCat Ausgaben verwerte...

Danke für den Tipp ich werde mir das mal anschauen, hab glaub ich auch etwas drüber gelesen das es ab Gingerbread nimmer geht oder? Also im UI....

Naja egal, Dankeschön ;)
 
Dafür wurde mein thread häufige Fehler Ursachen und Lösungen angepinnt. Die gepinnten Themen sollten gelesen werden.

Gesendet von meinem GT-S5660 mit der Android-Hilfe.de App
 
Ja ich hab mir den Thread durchgelesen, allerdings habe ich viel zu wenig Erfahrung mit Android um da alles ausm FF zu können...
So mein Ansatz jetzt:

Code:
btn_AddEntry.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                new GetWebsiteSource().execute("");
            }
        });
So rufe ich meinen AsyncTask in der Hauptklasse auf.
Und so sieht die Async Klasse aus aber es will nicht funktionieren:

Code:
public class GetWebsiteSource extends AsyncTask<String, String, String> {

        @Override
        protected String doInBackground(String... params) {
            try {
                URL url = new URL("http://85.214.24.87:85/FTP/Cloud/Privat/Jonas/Genealogie/Request/EntryManager/AddEntry.php?ID=" + num_ID.getText() + "&Name=" + txt_Name.getText() + "&Vorname=" + txt_Vorname.getText() + "&Geburtsdatum=" + txt_Geburtsdatum.getText() + "&Geburtsort=" + txt_Geburtsort.getText() + "&Hochzeitsdatum=" + txt_Hochzeitsdatum.getText() + "&Hochzeitsort=" + txt_Hochzeitsort.getText() + "&Kinder=" + num_Kinder.getText() + "&Sterbedatum=" + txt_Sterbedatum.getText() + "&Sterbeort=" + txt_Sterbeort.getText());
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                BufferedReader rd;
                rd = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                StringBuffer sb = new StringBuffer();
                String line;
                while((line = rd.readLine()) != null) {
                    sb.append(line);
                }
                String result = sb.toString();
                Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
Hier werte ich mein Ergebnis auch noch nicht aus, jedoch meldet sich LogCat wieder, das Ergebnis wird ja in der Variable result gespeichert..Ich habe gelesen das es in der AsyncTask Extension eine Methode gibt, die onPostExecute() heißt, dort soll man angeblich auf die Steuerelemente der UI zurückgreifen können, aber wie bekomme ich mein Ergebnis von doInBackground in onPostExecute() sodass ich dort ein Toast.makeText() ausgeben kann?

LogCat Ausgabe:

Code:
12-28 16:07:00.776: D/libEGL(24462): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
12-28 16:07:00.784: D/libEGL(24462): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
12-28 16:07:00.792: D/libEGL(24462): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
12-28 16:07:00.886: D/OpenGLRenderer(24462): Enabling debug mode 0
12-28 16:07:03.214: D/OpenGLRenderer(24462): Flushing caches (mode 0)
12-28 16:07:06.151: D/ClipboardServiceEx(24462): enter dismissUIDataDialog
12-28 16:07:08.448: W/dalvikvm(24462): threadid=12: thread exiting with uncaught exception (group=0x40bdc1f8)
12-28 16:07:08.464: E/AndroidRuntime(24462): FATAL EXCEPTION: AsyncTask #1
12-28 16:07:08.464: E/AndroidRuntime(24462): java.lang.RuntimeException: An error occured while executing doInBackground()
12-28 16:07:08.464: E/AndroidRuntime(24462):     at android.os.AsyncTask$3.done(AsyncTask.java:278)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at java.lang.Thread.run(Thread.java:856)
12-28 16:07:08.464: E/AndroidRuntime(24462): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
12-28 16:07:08.464: E/AndroidRuntime(24462):     at android.os.Handler.<init>(Handler.java:121)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at android.widget.Toast$TN.<init>(Toast.java:347)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at android.widget.Toast.<init>(Toast.java:93)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at android.widget.Toast.makeText(Toast.java:235)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at de.geartech.genealogie.Activity_NewEntry$GetWebsiteSource.doInBackground(Activity_NewEntry.java:73)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at de.geartech.genealogie.Activity_NewEntry$GetWebsiteSource.doInBackground(Activity_NewEntry.java:1)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
12-28 16:07:08.464: E/AndroidRuntime(24462):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-28 16:07:08.464: E/AndroidRuntime(24462):     ... 5 more
12-28 16:07:08.487: D/dalvikvm(24462): GC_CONCURRENT freed 174K, 4% free 6954K/7239K, paused 2ms+4ms
12-28 16:07:08.675: D/OpenGLRenderer(24462): Flushing caches (mode 0)
Danke für die Hilfe im Voraus.

Edit: Wenn ich das auslesen des Quelltextes weg lassen, also die Async Extension leer lasse, kommen keine Fehler wenn ich den Button drücke.
 
du darfst im doinBackground keinen toast erstellen.
 
Ok, dann kommen die Fehler nicht mehr und die Anwendung stürtzt nicht ab. Aber wie bekomme ich jetzt die Variable result in ein Toast, wenn ich kein Toast in doBackground machen darf? Dazu ist doch die Methode onPostExecute da oder nicht? Aber ich verstehe nicht, wie ich die Variable übergebe so dass der Parameter von der Methode onPostExecute den seiteninhalt enthält und in dort in der methode das Toast machen kann....

Edit: Okey, die Übergabe hab ich gelesen funktioniert mit dem Return von der doInBackground...aber das Programm will immer noch nicht laufen... Es kommen auch keine Fehler, die Seite wird einfach nicht aufgerufn.

Edit: Habs gelöst. Funktioniert. Danke
 
Zuletzt bearbeitet:
schon alleine für zukünftige neue entwickler hier, wäre es gut, die lösung zu posten
 
Code:
btn_AddEntry.setOnClickListener(new OnClickListener() {             public void onClick(View v) {                 new GetWebsiteSource().execute("");             } });

Code:
public class GetWebsiteSource extends AsyncTask<String, String, String> {          @Override         protected String doInBackground(String... params) {             
String result;
 try {                 URL url = new URL("http://85.214.24.87:85/FTP/Cloud/Privat/Jonas/Genealogie/Request/EntryManager/AddEntry.php?ID=" + num_ID.getText() + "&Name=" + txt_Name.getText() + "&Vorname=" + txt_Vorname.getText() + "&Geburtsdatum=" + txt_Geburtsdatum.getText() + "&Geburtsort=" + txt_Geburtsort.getText() + "&Hochzeitsdatum=" + txt_Hochzeitsdatum.getText() + "&Hochzeitsort=" + txt_Hochzeitsort.getText() + "&Kinder=" + num_Kinder.getText() + "&Sterbedatum=" + txt_Sterbedatum.getText() + "&Sterbeort=" + txt_Sterbeort.getText());                 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();                 BufferedReader rd;                 rd = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));                 StringBuffer sb = new StringBuffer();                 String line;                 while((line = rd.readLine()) != null) {                     sb.append(line);                 }                 result = sb.toString();                 Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();             } catch (MalformedURLException e) {                 e.printStackTrace();             } catch (IOException e) {                 e.printStackTrace();             }             return result; }

Und dann noch in die selbe Klasse:

Code:
protected void onPostExecute(String result) {
     Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).Show();
}

Bittaschöön ;)
 
Zurück
Oben Unten