Frage

Ich mache ein Android-Programm, dass abruft Inhalt einer Webseite mit HttpURLConnection. Ich bin neu in Java und Android.

Das Problem ist: Reader liest ganze Seite Quelle, aber in den letzten Iteration, während es nicht append zu String, dass im letzten Teil.

Mit debbuger Ich habe festgestellt, dass in der letzten Schleife Iteration, string Buff erstellt wird, aber String nur spielt es keine append.

ich brauche abgerufene Inhalte zu analysieren. Gibt es einen besseren Weg, um den Inhalt für die Analyse als die Verwendung von Zeichenketten zu behandeln. Ich habe auf vielen anderen Seiten gelesen, dass in Java-String Größe nur durch die verfügbare Speichergröße begrenzt ist. Ich habe auch mit String versucht.

Wer weiß, was das Problem sein könnte. Btw fühlen sich frei, alle Verbesserungen, um den Code zu suggerieren.

Danke!

URL u;
    try {
        u = new URL("http://feeds.timesonline.co.uk/c/32313/f/440134/index.rss");
        HttpURLConnection c = (HttpURLConnection) u.openConnection();
        c.setRequestProperty("User-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)");
        c.setRequestMethod("GET");
        c.setDoOutput(true);
       c.setReadTimeout(3000);
          c.connect();
        StringBuffer stringBuffer = new StringBuffer("");
        InputStream in = c.getInputStream();
        InputStreamReader inp = new InputStreamReader(in);
        BufferedReader reader = new BufferedReader(inp);
        char[] buffer = new char[3072];
        int len1 = 0;
        while ( (len1 = reader.read(buffer)) != -1 ) 
        {
            String buff = new String(buffer,0,len1);
            stringBuffer.append(buff);
        }
        String stranica = new String(stringBuffer);
        c.disconnect();
        reader.close();
        inp.close();
        in.close();
War es hilfreich?

Lösung

testete ich den Code sowohl auf J2SE und Android und hat gut funktioniert. Ich habe ein paar Zeilen zu den Ergebnissen für J2SE vergleichen:

System.out.println("ITERATIONS: " + iterations);
System.out.println("LEN: " + stranica.length());
System.out.println("LAST 50 chars: "
        + stranica.substring(stranica.length() - 50, stranica
                .length()));

FileWriter fw = new FileWriter("/tmp/tmp-j2se.txt");
fw.write(stranica);
fw.close();

Und Android:

System.out.println("ITERATIONS: " + iterations);
System.out.println("LEN: " + stranica.length());
System.out.println("LAST 50 chars: "
        + stranica.substring(stranica.length() - 50, stranica
                .length()));

FileOutputStream fos = openFileOutput("tmp-and.txt",
        Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);

System.out.println(getFileStreamPath("tmp-and.txt")
        .getAbsolutePath());

fos.write(stranica.getBytes());
fos.close();

verglich ich die beiden Dateien und waren identisch, aber was verwirrt mich war die Länge von String auf beiden Plattformen zurück stimmen nicht überein:

J2SE:

LEN: 22479

Android:

05-22 20: 28: 22,733: INFO / System.out (455): LEN: 22433

Allerdings ist die Größe der Datei auf Android-Plattform erhalten hatte auch eine Länge von 22479 Bytes. Die einzige Erklärung, die ich withouth weitere Untersuchungen finden kann, ist, dass einige Codierung (vielleicht Linie / End) Übersetzungen transparent gemacht werden.

Zurück zum Punkt Ihrer Frage scheint Code (und bewies) korrekt. Auf dem Android-Plattform Version / Hardware testen u Code?

Andere Tipps

Sie können eine einfachere Implementierung verwenden möchten. Oder Schalter zur Verwendung von HttpClient die Daten abzurufen, mit ihrem ResponseHandler Muster besonders.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top