Android: analisando arquivos JSON grandes
Eu estou criando uma aplicação android que deve analisar um Json de um arquivo ou url para um jsonarray e jsonobjects. O problema é que meu json é de 3.3 mb e quando eu uso um código simples, algo assim: (não consigo acessar meu código real agora porque estou no trabalho, copiei algum código do tutorial; então pode haver alguns erros nele)
(supondo que eu já tenha meu conteúdo de fluxo de entrada)
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
String twitterfeed = builder.toString();
}
JSONArray jsonArray = new JSONArray(twittefeed);
Log.i(ParseJSON.class.getName(),
"Number of entries " + jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Log.i(ParseJSON.class.getName(), jsonObject.getString("text"));
Quando eu executo este código no meu dispositivo android, recebo um erro OutOfMemory ao analisar a string para o jsonArray. Eu registrei algumas coisas e descobri que minha string total é de 17 mb (de um arquivo json de 3.3 mb ?!) Quando eu uso um pequeno arquivo json, como um twitterfeed, o código funciona bem. Quando eu tenho essa cadeia de 17 mb na minha memória eu não posso analisar o json, porque então eu ficar sem memória.
Depois de muita pesquisa descobri que jackson pode ser a minha solução, porque eu entendi que é possível analisar um fluxo de entrada. Isso deve ajudar, porque eu não preciso da string de 17 mb na minha memória; e esta não é a maneira mais eficiente que eu conheço ... Mas eu não consigo deixar claro que isso realmente funcionará, e não consegui fazê-lo funcionar. Alguém sabe disso é realmente vai funcionar, e onde eu posso encontrar um tutorial?
Eu encontrei o"createJsonParser - public JsonParser createJsonParser (InputStream in)" e acho que este é o meu caminho a seguir ... mas eu não sei como implementar isso no meu código e não consigo encontrar um exemplo. Alguém sabe como isto funciona?