Android - HTTP GET请求大量的JSON响应

时间:2014-04-02 06:51:04

标签: android json performance http get

我有一个很大的JSON输入(download the file)API,我不知道如何解析这些数据。我需要:

  1. 将此数据(整个JSON输入)保存到文本文件或数据库。最好的方法是什么?
  2. 从文本文件或数据库加载此数据,并从JSON标记“list”(第一个标记)创建JSONArray
  3. 解决方案应该很快并且支持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转换为JSONObjectfileContent.ToString()并不理想,有时我会OutOfMemoryException

1 个答案:

答案 0 :(得分:1)

首先:处理HttpClient。谷歌不赞成:

  

不幸的是,Apache HTTP Client没有,这是其中之一   我们不鼓励使用它的原因。

来源:developer.android.com

一个好的替代品是Google Volley。你必须自己建立JAR,但它就像魅力一样。我使用OkHttp-StackGSON requests来设置Google排球。

在你的情况下,你会写另一个请求,它只是将响应写入SD卡块。你以前不要缓冲字符串!以及从您编写的文件中打开输入流并将其提供给JSON反序列化器的一些逻辑。杰克逊和GSON能够开箱即用。

当然一切都适用于Android 2.3。

不要,我再说一遍,不要试图将整个序列化的东西转储成字符串或其他东西。这几乎是OutOfMemoryException的保证。