Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Quellcode auslesen .. Schleife ?!

Das Thema "Quellcode auslesen .. Schleife ?!" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 31.08.2011, 19:37   #1 (permalink)
Junior Mitglied

Registriert seit: 07.02.2011
Beiträge: 31
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
Standard Quellcode auslesen .. Schleife ?!

Hallo,

Ich will den Quellcode einer Seite auslesen (z.B. Google.de), um danach etwas herauszufiltern..

Es soll ungefähr so funktionieren:

Schleife{

Quellcode auslesen;
Quellcode filtern;
Das herausgefilterte ausgeben;

}

Ich versuche den Quellcode so auszulesen:

Code:
public static String makeRequest(String path) throws Exception {
        final String TAG = "HttpClient"; //Used in logging etc.
        String str = "";

        try {
            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpGet httpost = new HttpGet(path);

            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            str = (String) httpclient.execute(httpost, responseHandler);
        } catch (Exception e) {
            Log.e(TAG, e.getMessage());
        }
        return str;
    }
Allerdings ist da folgendes Problem. Das Auslesen des Quellcodes wird vor allen anderem ausgeführt. z.B. Ich habe ein Label. Wo beim Start des Programmes "..." stehen sollte. Also ich sage bevor er den Quellcode auslesen soll soll er "..." in das Label schreiben. In die Schleife schreibe ich eine For-Schleife mit Counter 5. OBWOHL ich programmiert habe das er nach jeden mal auslesen was ausgeben soll, ließt er 5 mal hintereinander den Quellcode aus Ohne dazwischen oder davor etwas zu machen.

ICH BIN TOTAL VERZWEIFELT !!!

Ich stecke seit knapp einer Woche bei dem Problem.

Kann mir Bitte wer einen Tipp geben ?

lg lucaaAUT , Danke
lucaaAUT ist offline   Mit Zitat antworten
Alt 31.08.2011, 23:27   #2 (permalink)
Erfahrener Benutzer

Modell: G1 DevPhone / SGS2 / SGT10.1v

Registriert seit: 20.01.2009
Beiträge: 238
Abgegebene Danke: 7
Erhielt 50 Danke für 47 Beiträge
Standard AW: Quellcode auslesen .. Schleife ?!

Zitat:
OBWOHL ich programmiert habe das er nach jeden mal auslesen was ausgeben soll
Ich vermute du meinst damit deinen TextView (o.ä.) füllen? Wenn ja, dann liegt es daran, dass du mit deinem Auslesen des Quelltextes den UI-Thread blockierst - daher erfolgt die Aktualisierung erst verzögert.

So in etwa sollte es funktionieren:

Code:
 private class DownloadFilesTask extends AsyncTask<URL, Void, String> {
     protected String doInBackground(URL... urls) {
         return makeRequest(urls[0]);
     }
     protected void onPostExecute(String... result) {
         #result anzeigen lassen
     }
 }

...
AsyncTask t = new DownloadFilesTask();
t.execute(deineURL);
Beispiel von androidapi:AsyncTask
__________________
Meine App: Die Cocktail App für Android™ - jetzt im Market (PRO)
sixi ist offline   Mit Zitat antworten
Alt 01.09.2011, 00:03   #3 (permalink)
Junior Mitglied

Registriert seit: 07.02.2011
Beiträge: 31
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
Standard AW: Quellcode auslesen .. Schleife ?!

Hallo,

Danke für die Antwort. Ich bin leider neu in Java und kann desshalb nicht so viel mit dem Code anfangen

Eine neue Class erstellen mit dem Namen "DownloadFilesTask" und dem Code
Code:
private class DownloadFilesTask extends AsyncTask<URL, Void, String> {
     protected String doInBackground(URL... urls) {
         return makeRequest(urls[0]);
     }
     protected void onPostExecute(String... result) {
         #result anzeigen lassen
     }
 }
?

und im Hauptprogramm

Code:
AsyncTask t = new DownloadFilesTask();
t.execute(deineURL);
Aber vielen Dank für die Antwort ))

lg
lucaaAUT ist offline   Mit Zitat antworten
Alt 01.09.2011, 10:31   #4 (permalink)
Erfahrener Benutzer

Modell: G1 DevPhone / SGS2 / SGT10.1v

Registriert seit: 20.01.2009
Beiträge: 238
Abgegebene Danke: 7
Erhielt 50 Danke für 47 Beiträge
Standard AW: Quellcode auslesen .. Schleife ?!

Das ist eine Möglichkeit.

Du kannst das ganze auch als "Anonyme Inline Klasse" verwenden (tue ich immer, wenn der AsyncTask nur an einer Stelle genutzt wird):

Code:
AsyncTask myTask = new AsyncTask<URL, Void, String>(){
  ...
}.execute();
vgl. Java ist eine Insel: Innere Klassen

Allgemein sehr zu empfehlen:
Android:Responsiveness
sowie der Rest der "Best Practices". Dort wird die UI-Thread Problematik erklärt.
__________________
Meine App: Die Cocktail App für Android™ - jetzt im Market (PRO)
sixi ist offline   Mit Zitat antworten
Alt 01.09.2011, 11:21   #5 (permalink)
Fortgeschrittenes Mitglied

Modell: Samsung Galaxy S und Galaxy 5

Registriert seit: 31.03.2011
Beiträge: 480
Abgegebene Danke: 35
Erhielt 89 Danke für 73 Beiträge
Standard AW: Quellcode auslesen .. Schleife ?!

Warum hast Du eigentlich einen neuen Thread aufgemacht, wo dein anderer doch gerade erst ein paar Tage alt ist?

Quellcode auslesen funktioniert, aber nicht in Schleife ?!

Der Weg über die inner Klasse ist wesenlich bequemer, weil diese dann auf die Variablen des sie beinhaltenden Objektes zugreifen kann. So ist es leichter, mit View elementen zu interagieren.
JanF ist offline   Mit Zitat antworten
Alt 03.09.2011, 12:17   #6 (permalink)
Junior Mitglied

Registriert seit: 07.02.2011
Beiträge: 31
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
Standard AW: Quellcode auslesen .. Schleife ?!

Hallo,

Okay ich bin jetzt einen kleinen Schritt weiter.

Code:
public class Test_httpclientActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    AsyncTask myTask = new AsyncTask<URL, Void, String>(){
    	
    	protected String doInBackground(URL... urls) {
				return makeRequest(urls[0]);                 //  <- Fehler
        }
        protected void onPostExecute(String... result) {
        
        	Toast.makeText(Test_httpclientActivity.this,"FERTIG", Toast.LENGTH_SHORT).show();
        }
            
    }.execute();
    
    public static String makeRequest(URL urls) throws Exception {
        final String TAG = "HttpClient";
        String str = "";

        try {
            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpGet httpost = new HttpGet(urls);                           // <- Fehler

            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            str = (String) httpclient.execute(httpost, responseHandler);
        } catch (Exception e) {
            Log.e(TAG, e.getMessage());
        }
        return str;
    }
    
}
Okay.. Ich versteh das ganze noch nicht ganz.
Kann den Code einer erklären ? Dafür wäre ich echt dankbar
Will ihn ja verstehen auch :P

lg
lucaaAUT ist offline   Mit Zitat antworten
Alt 03.09.2011, 12:36   #7 (permalink)
Erfahrener Benutzer

Modell: G1 DevPhone / SGS2 / SGT10.1v

Registriert seit: 20.01.2009
Beiträge: 238
Abgegebene Danke: 7
Erhielt 50 Danke für 47 Beiträge
Standard AW: Quellcode auslesen .. Schleife ?!

1. übergibst du der "execute()"-Methode keine Parameter - die erwartet "URL... urls", also ein Array von URLs --> NullPointer urls[0] sowie HttpGet(urls);
2. wirst du 'nen problem kriegen, wenn du den AsyncTask so als Klassenvariable deklarierst, da er vor der "onCreate" ausgeführt wird -> sobald du auf ein Textview schreibst wird dieses null sein, da das Layout noch nich gesetzt ist --> schieb den ganzen Block hoch in die onCreate-Methode
__________________
Meine App: Die Cocktail App für Android™ - jetzt im Market (PRO)
sixi ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei sixi für diesen Beitrag:
lucaaAUT (03.09.2011)
Alt 03.09.2011, 14:57   #8 (permalink)
Junior Mitglied

Registriert seit: 07.02.2011
Beiträge: 31
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
Standard AW: Quellcode auslesen .. Schleife ?!

Gut,
Also wenn ich das richtig verstanden habe sollte das so Aussehen?

Code:
public class Test_httpclientActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        AsyncTask myTask = new AsyncTask<URL, Void, String>(){
        	
        	protected String doInBackground(URL... urls) {
    				return makeRequest(urls[0]);
            }
            protected void onPostExecute(String... result) {
            
            	Toast.makeText(Test_httpclientActivity.this,"FERTIG", Toast.LENGTH_SHORT).show();
            }
                
        }.execute(urls[0]);
    }
    
    
    
    public static String makeRequest(URL urls) throws Exception {
        final String TAG = "HttpClient";
        String str = "";

        try {
            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpGet httpost = new HttpGet(urls[0]);

            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            str = (String) httpclient.execute(httpost, responseHandler);
        } catch (Exception e) {
            Log.e(TAG, e.getMessage());
        }
        return str;
    }
    
}
Noch eine Frage: Wie rufe ich die Funktion auf das ich das Ergebnis also den Quellcode der Seite bekomme?

lg
lucaaAUT ist offline   Mit Zitat antworten
Alt 03.09.2011, 15:57   #9 (permalink)
Erfahrener Benutzer

Modell: G1 DevPhone / SGS2 / SGT10.1v

Registriert seit: 20.01.2009
Beiträge: 238
Abgegebene Danke: 7
Erhielt 50 Danke für 47 Beiträge
Standard AW: Quellcode auslesen .. Schleife ?!

Das Ergebnis ist ja das von dem makeRequest-Aufruf. Also entweder hast du es in dem doInBackground (returnst es da aber sofort weiter an die onPostExecute). Dort steht es in result[0].

Sinnvoll wäre es halt noch den Quellcode in der doInBackground oder direkt in deiner makeRequest zu verarbeiten (außer du willst den reinen Quellcode irgendwo anzeigen, aber ich geh mal davon aus, dass du nur Teile davon verwenden willst), da du dich an den Stellen noch in einem Thread im Hintergrund bewegst. Würdest du es in der onPostExecute-Methode machen, dann kriegst du unter Umständen Probleme mit laggender UI
__________________
Meine App: Die Cocktail App für Android™ - jetzt im Market (PRO)
sixi ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei sixi für diesen Beitrag:
lucaaAUT (03.09.2011)
Alt 03.09.2011, 17:51   #10 (permalink)
Junior Mitglied

Registriert seit: 07.02.2011
Beiträge: 31
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
Standard AW: Quellcode auslesen .. Schleife ?!

Hallo, Danke das du mir hilfst

Okay ich werde den Quellcode gleich in der makeRequest Funktion bearbeiten.
(Da der Code zu lang wäre um ihn hier zu posten werde ich ihn mit "// Quellcode bearbeiten") abkürzen:

Code:
public class Test_httpclientActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

		AsyncTask myTask = new AsyncTask<URL, Void, String>(){
        	
        	protected String doInBackground(URL... urls) {
    				return makeRequest(urls[0]);
            }
            protected void onPostExecute(String... result) {
            
            	Toast.makeText(Test_httpclientActivity.this, result[0] , Toast.LENGTH_SHORT).show();
            }
                
        }.execute(urls[0]);  <- FEHLER(1)
    }
    
    
    
    public static String makeRequest(URL urls) throws Exception {
        final String TAG = "HttpClient";
        String str = "";

        try {
            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpGet httpost = new HttpGet(urls[0]); <- FEHLER(2)

            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            str = (String) httpclient.execute(httpost, responseHandler);
        } catch (Exception e) {
            Log.e(TAG, e.getMessage());
        }
        
        /*
         * Quellcode bearbeiten! Code blablabla
         */
            
        return str;
    }
    
}
FEHLER(1) = "urls cannot be resolved into a variable"
FEHLER(2) = "The type of the expression must be an array type but it resolved to URL"

Okay langsam versteh ich das ganze schon... Es ist logisch. Nur was die 2 Fehler bedeuten weiß ich nicht O.o Kannst du mir da weiterhelfen?
lucaaAUT ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
Kernel Quellcode codeworkx Cat StarGate Forum 14 08.09.2011 21:26
Quellcode auslesen funktioniert, aber nicht in Schleife ?! lucaaAUT Android App Entwicklung 10 28.08.2011 11:41
Quellcode Boyerkeil Samsung Galaxy S (I9000) Forum 3 15.08.2010 21:30
Reboot schleife Darkseth Motorola Milestone Forum 5 08.08.2010 00:21
CM 5.08 flash. Bootscreen in Schleife Katz@Magic Root / Hacking / Modding für HTC Magic 0 16.07.2010 12:32




Du liest gerade: "Quellcode auslesen .. Schleife ?!" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.