如何在android中处理来自服务器的巨大数据响应

时间:2015-07-24 07:19:23

标签: android

我正在使用eclipse ADT进行Android开发。让我解释一下我的问题。我可以从我的服务器api收到响应,问题是,数据非常庞大,无法在我的logcat中显示整个响应。我使用AsynTask来获得响应。  DoinBackground方法

getBookingResults = ServerConnection.getbookings(
                BookingsActivity.this, Utils.URL + "users/"
                        + "123145/" + "subscribed");

这是我在单独的课程中的Get()

public static String getData(Context ctx, String uri) {

        BufferedReader reader = null;
        StringBuilder sb = null;
        try {
            Log.d("Serverconnection URL ", uri);
            URL url = new URL(uri);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setConnectTimeout(200000);

            // save status code
            Utils.statusCode = con.getResponseCode();
            // String responseBody = EntityUtils.toString(response.getEntity());
            sb = new StringBuilder();
            reader = new BufferedReader(new InputStreamReader(
                    con.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            Log.d("server connection getData", "" + sb.toString());

            return sb.toString();

        } catch (SocketTimeoutException e) {
            Log.d("server connection getData Error ", "" + e);

        } catch (IOException e) {
            e.printStackTrace();

            return " ";

        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    return " ";
                }
            }
        }
        return sb.toString();
    }

当我检查我的logcat中的响应字符串时,显示字符串长度为11743. logcat未显示整个响应

帮助我处理大量数据回复

提前致谢

1 个答案:

答案 0 :(得分:0)

事情是你不能盲目地从服务器分配所有数据,否则OOM的风险非常高。你应该使用类似于android建议列表的技术,只在内存中保留用户可见的元素。换句话说,首先你必须弄清楚尺寸是什么或期望尺寸可能是巨大的。然后按块加载数据块到某个UI元素并实现某种“滚动加载”。如果您在滚动时无法从网络加载,可能是由于连接的性质,那么您应该按块加载块并将数据保存到本地存储。然后如上所述以块的形式显示它。我就是这样做的。对不起,不完全是您要找的答案。