Json在使用OkHttp时遇到问题

时间:2015-06-26 01:31:12

标签: android json okhttp

我正在使用OkHttp从api中的json数据中检索数据。我写了以下代码:

OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(forecastUrl).build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
                // TODO: manage failure
                // try again
                doInBackground(params);
            }

            @Override
            public void onResponse(Response response) throws IOException {
                if (response.isSuccessful()) {
                    String jsonData = response.body().string();
                    nowDataList.clear();
                    hourlyDataList.clear();
                    dailyDataList.clear();
                    try {
                        nowDataList.add(getNowData(jsonData));
                        for (int i = 0; i < 24; i++) {
                            hourlyDataList.add(getHourlyData(jsonData, i));
                        }
                        for (int i = 0; i < 8; i++) {
                            dailyDataList.add(getDailyData(jsonData, i));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                } else {
                    // if response is not successful try again
                    doInBackground(params);
                }
            }

现在上面的代码以良好的互联网速度(WiFi / LTE)接收完整的数据。 但是我有时候在慢速网速(主要是2G / 3G)上没有得到完整的json数据

我也尝试过以下解决方案:Android JSON receive issue。虽然它不是基于OkHttp,但我为我的代码修改了它,但没有任何利润。

请帮我弄清楚问题,并提前致谢。

2 个答案:

答案 0 :(得分:1)

onResponse不等待获得整个回复,如果您的回复非常大/或者您没有良好的互联网连接,那么这可能是一个问题。

我用过这个,它对我有用。

// get the full response
response = client.newCall(request).execute();

然后继续使用您的代码。希望它有所帮助。

答案 1 :(得分:0)

对于慢速连接,请尝试更改默认超时:

client.setConnectTimeout(15, TimeUnit.SECONDS);
client.setReadTimeout(15, TimeUnit.SECONDS);