Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Re: OutOfMemory lendo inputStream.

Eu estava carregado a string na memória pois tinha que dar um replace em alguns caracteres antes de fazer o parser com o simplexml.
Mas testei aqui desta forma pedindo para ele ler direto do arquivo como o Rafael falou e funcionou.
Vou ter que dar o replace direto no servidor então.

Obrigado a todos.
Problema resolvido.

-----------------------------------
Att. Daniel N. Capelassi


2013/8/30 Rafael Nobre Rocha <rafael.rocha@novaprolink.com.br>
Cara, não conheço a biblioteca, mas duvido MUITO que não tenha um método que processe Streams. Vc nao precisa converter pra uma baita String em memória pra isso. Olhei basicamente no site e tem um exemplo que usa File

Serializer serializer = new Persister();  File source = new File("example.xml");    Example example = serializer.read(Example.class, source);

Certamente tem outra forma que usa um Stream diretamente. Ou na pior das hipoteses salva o arquivo em disco e processa usando File. Não há a menor necessidade de carregar a String toda em memória, ainda por cima lendo linha a linha!

Em quinta-feira, 29 de agosto de 2013 17h39min17s UTC-3, daniel.capelassi escreveu:
Pessoal, eu baixo atravéz do meu app arquivo xml da internet de 3 mb. Depois pego o stream que baixei e tento converter ele para string, assim posso manipular o xml.
O problema é que no meu celular Nexus ele consegue passar o stream para string.
Já no meu celular antigo, LG p500 ele da erro "out of memory."
Será que a memória é tão limitada assim que não consigo carregar 3 mb na memória ou estou fazendo alguma coisa errada?

Já tentei vários códigos para converter a inputStream baixada para string. Segue um exemplo que estou usando atualmente.

       InputStream is = ... stream baixado        

        BufferedReader reader = new BufferedReader(new InputStreamReader(is), 8192);
        String line;
        StringBuilder results = new StringBuilder("");

        while( ( line = reader.readLine() ) != null){
            results.append(line);
        }

        reader.close();
        return results.toString();



Ele sempre da o erro no  results.append(line); após processar um pouco.
Estou fazendo o processo em uma asyncTask.
Fiz um app separado só para baixar e passar por esta funcao, para assegurar que mais nada
está ocupando a memória no app.

Alguem pode me ajudar? Vlw.

-----------------------------------
Att. Daniel N. Capelassi

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário