Quellcode auslesen funktioniert, aber nicht in Schleife ?!

L

lucaaAUT

Neues Mitglied
0
Hallo, Ich möchte bei meiner App den Quellcode einer Seite auslesen.
Es funktioniert, aber auch irgendwie nicht.
Code:
Code:
try {            
        	URL url_ = new URL("http://www.lolsignup.co.de/");
    		URLConnection conn = url_.openConnection();
    		DataInputStream in = new DataInputStream ( conn.getInputStream (  )  ) ;
    		BufferedReader d = new BufferedReader(new InputStreamReader(in, "iso-8859-15"));
    		String content = "";
    		while(d.ready())
    		{
    			content += d.readLine();
    		}

Einmalig auslesen klappt wunder bar. Aber auch da kommt mir vor Führt das Programm das auslesen vor allem anderen durch. z.B. Ich habe ein Label mit dem Standardtext "Dies ist ein Test". Starte ich nun mein Programm, ist das Label leer, solange bis der Quellcode fertig ausgelesen wurde. Dann kommt erst "Dies ist ein Test" als Text auf das Label.

Mit Schleife (was für mein Programm notwendig ist) funktioniert es nicht. Wenn ich zum Beispiel eine For-Schleife mit 3 Durchgängen mache ließt er 3 mal hintereinander ohne was anderes zu machen den Quellcode aus (was er ja nicht tun soll weil ich ja nach jeden Durchgang etwas aus dem Quellcode herausfiltern will)..

Wieso geht das nicht , bzw Wie kann man das ändern?

lg Lucaa! :)
 
Niemand hat dir versprochen das es arbeiten würde:
Code:
True if the next read() is guaranteed not to block for input,  false otherwise.  Note that returning false does not guarantee that the  next read will block.

Und bitte, tue so etwas nicht
Code:
content += d.readLine();

Dafür werden die Entwickler gelyncht.
 
okay...

Danke erstmal, Aber gibt es eine andere Möglichkeit?
Wieso werden Sie gelyncht ? :p

lg
 
Warum nimmst du nicht dem HttpClient (welches standartmäßig da ist, und alles richtig tut)?

Zum 2. Frage: da String immutabel ist, artet string += string in eine Speicherzuweisungsorgie
mit herumkopieren - was für die Performance eher hinderlich ist.
 
  • Danke
Reaktionen: lucaaAUT
Super Danke :)
Super erklärt :)

lg lucaaAUT
 
Soweit ich weiß, baut der Compiler das so um:
String content;
while(d.ready()){
StringBuilder sb = new StringBuilder();
sb.append(content).append(d.readLine());
content = sb.toString();
}

Dann ist auch ersichtlich warum das Mist ist. ;)
 
Bleibt die Frage, ob er es wirklich so umbaut?! ^^ Kann man sich da sicher sein?
 
Code:
.method public foobar(Ljava/io/BufferedReader;)V
    .locals 3
    .parameter "d"
    const-string v0, ""

    .line 95
    .local v0, content:Ljava/lang/String;
    :goto_2
    invoke-virtual {p1}, Ljava/io/BufferedReader;->ready()Z

    move-result v1

    if-nez v1, :cond_9

    .line 98
    return-void

    .line 96
    :cond_9
    new-instance v1, Ljava/lang/StringBuilder;

    invoke-static {v0}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v2

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {p1}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    goto :goto_2
.end method

meine java rekonstruktion:
while(d.ready()){
StringBuilder sb = new StringBuilder(String.valueOf(content));
sb.append(d.readLine());
content = sb.toString();
}
durch den valueOf() Aufruf ist der Code also noch langsamer als oben geschrieben. ;)
 
  • Danke
Reaktionen: v Ralle v
Danke :) Sehr interessant.
 
Hallo, Ich habe jetzt erst leider wieder Internet.
Ich bin Leider noch ein Anfänger und mir sagst das im Moment überhaupt nichts.
Kann mir wer Links oder einen Code geben?

Wäre echt super danke ;)
 
Kann mir keiner mehr helfen? :(

lg Luca

#Edit:

Ich habs jetzt mit der Funktion versucht:

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;
    }

Und es geht noch immer nicht :(
 
Zuletzt bearbeitet:

Ähnliche Themen

SaniMatthias
Antworten
19
Aufrufe
947
swa00
swa00
H
Antworten
2
Aufrufe
1.309
Hcman
H
O
Antworten
15
Aufrufe
2.966
ORHUX
O
Zurück
Oben Unten