我有一个很大的JSON输入(download the file)API,我不知道如何解析这些数据。我需要:
解决方案应该很快并且支持Android 2.3。你有什么建议吗?有什么想法吗?
我的代码:
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(urls[0]);
HttpResponse httpResponse;
httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
... and what next ?...
供参考:
EntityUtils抛出OutOfMemoryException
修改
我尝试将数据保存到文件中:
InputStream inputStream = httpEntity.getContent();
FileOutputStream output = new FileOutputStream(Globals.fileNews);
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, len);
}
没关系。我加载数据:
FileInputStream fis = null;
StringBuffer fileContent = new StringBuffer("");
fis = new FileInputStream(Globals.fileNews);
byte[] buffer = new byte[1024];
while (fis.read(buffer) != -1) {
fileContent.append(new String(buffer));
}
但是如何将StringBuffer
转换为JSONObject
? fileContent.ToString()
并不理想,有时我会OutOfMemoryException
。
答案 0 :(得分:1)
首先:处理HttpClient。谷歌不赞成:
不幸的是,Apache HTTP Client没有,这是其中之一 我们不鼓励使用它的原因。
一个好的替代品是Google Volley。你必须自己建立JAR,但它就像魅力一样。我使用OkHttp-Stack和GSON requests来设置Google排球。
在你的情况下,你会写另一个请求,它只是将响应写入SD卡块。你以前不要缓冲字符串!以及从您编写的文件中打开输入流并将其提供给JSON反序列化器的一些逻辑。杰克逊和GSON能够开箱即用。
当然一切都适用于Android 2.3。
不要,我再说一遍,不要试图将整个序列化的东西转储成字符串或其他东西。这几乎是OutOfMemoryException的保证。