Pregunta

Estoy haciendo un programa de androide que recupera el contenido de una página web utilizando HttpURLConnection. Soy nuevo en Java y Android.

El problema es: lector lee fuente de la página entera, pero en la última iteración, mientras que no lo hace anexados para StringBuffer la última parte.

El uso de Debbuger he determinado que, en la última iteración del bucle, se crea aficionado a la cadena, pero StringBuffer apenas no lo añaden.

necesito para analizar contenido recuperado. ¿Hay alguna forma mejor para manejar el contenido para analizar que el uso de cadenas. He leído en muchos otros sitios que tamaño de la cadena en Java está limitado sólo por el tamaño de almacenamiento dinámico disponible. He tratado con StringBuilder también.

Alguien sabe lo que podría ser el problema. Por cierto no dude en sugerir una mejora en el código.

Gracias!

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();
¿Fue útil?

Solución

He probado el código tanto en J2SE y Android y bien trabajado. He añadido unas pocas líneas para comparar los resultados de J2SE:

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();

Y 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();

Me comparó ambos archivos y eran idénticos, pero lo que me había desconcertado a la longitud devuelta por cuerdas en ambas plataformas no se ha encontrado:

J2SE:

LEN: 22479

Android:

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

Sin embargo, el tamaño del archivo obtenido en la plataforma Android también tenía una longitud de 22479 bytes. La única explicación que puedo encontrar withouth investigación adicional es que algunos de codificación (tal vez la línea / final) traducciones se están haciendo de forma transparente.

De vuelta al punto de su pregunta el código parece (y demostró) correcta. En la versión de la plataforma Android / hardware están probando su código u?

Otros consejos

Es posible que desee utilizar un simple aplicación . O, cambie a usar HttpClient para recuperar los datos, particularmente mediante su patrón de ResponseHandler.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top