繁体   English   中英

HTTP响应中缺少数据

[英]Missing data from HTTP response

我一直在尝试使用他们的网站为我的应用程序提供的Forecast.io API和JAR。 但是,在进行Web API调用时,似乎该站点返回的数据并未完全下载。

我尝试它打印数据,但似乎不是所有信息。

我正在使用此代码:

HttpClient client = new DefaultHttpClient();
URI website = new URI(requestURL);
HttpGet request = new HttpGet();
request.setURI(website);
HttpResponse response = client.execute(request);
scanner = new BufferedReader(new inputStreamReader(response.getEntity()
    .getContent()));

String availalbe;
while ((availalbe = scanner.readLine()) != null) {
   res += availalbe;
}

打印出的数据(在预期的途中停止):

{“纬度”:51.7589177,“经度”:-0.2342903,“时区”:“欧洲/伦敦”,“偏移量”:1,“当前”:{“时间”:1370612854,“摘要”:“部分多云”, “ icon”:“部分多云的日子”,“ precipIntensity”:0:“温度”:20.65,“ dewPoint”:10.56,“ windSpeed”:9.92,“ windBearing”:59,“ cloudCover”:0.34,“湿度“:0.5,”压力“:1023.91,”可见度“:10.75,”臭氧“:356.06},”分钟“:{”摘要“:” 30分钟内有小雨“,” icon“:”雨“,” data“:[{” time“:1370612820,” precipIntensity“:0},{” time“:1370612880,” precipIntensity“:0},{” time“:1370612940,” precipIntensity“:0},{” time“ :1370613000,“ precipIntensity”:0},{“ time”:1370613060,“ precipIntensity”:0},{“ time”:1370613120,“ precipIntensity”:0},{“ time”:1370613180,“ precipIntensity”:0 },{“ time”:1370613240,“ precipIntensity”:0},{“ time”:1370613300,“ precipIntensity”:0},{“ time”:1370613360,“ precipIntensity”:0},{“ time”:1370613420 ,“ precipIntensity”:0},{“ time”:1370613480,“ precipIntensity”:0},{“ time”:1370613540,“ precipIntensity”:0},{“ time”:1370613600,“ precipIntensity”:0}, {“时间”:1370613660,“沉淀 强度“:0.107,” precipIntensityError“:0.055,” precipProbability“:0.01,” precipType“:” rain“},{” time“:1370613720,” precipIntensity“:0.111,” precipIntensityError“:0.057,” precipProbability“:0.01 ,“ precipType”:“ rain”},{“ time”:1370613780,“ precipIntensity”:0.132,“ precipIntensityError”:0.065,“ precipProbability”:0.01,“ precipType”:“ rain”},{“ time”:1370613840 ,“ precipIntensity”:0.137,“ precipIntensityError”:0.062,“ precipProbability”:0.03,“ precipType”:“ rain”},{“ time”:1370613900,“ precipIntensity”:0.142,“ precipIntensityError”:0.065,“ precipProbability” :0.03,“ precipType”:“ rain”},{“ time”:1370613960,“ precipIntensity”:0.161,“ precipIntensityError”:0.072,“ precipProbability”:0.04,“ precipType”:“ rain”},{“ time” :1370614020,“ precipIntensity”:0.174,“ precipIntensityError”:0.074,“ precipProbability”:0.04,“ precipType”:“ rain”},{“ time”:1370614080,“ precipIntensity”:0.187,“ precipIntensityError”:0.077,“ precipProbability“:0.08,” precipType“:” rain“},{” time“:1370614140,” precipIntensity“:0.207,” precipIntensityError“:0.084,” precipPro bability“:0.09,” precipType“:” rain“},{” time“:1370614200,” precipIntensity“:0.223,” precipIntensityError“:0.088,” precipProbability“:0.1,” precipType“:” rain“},{”时间”:1370614260,“ precipIntensity”:0.224,“ precipIntensityError”:0.094,“ precipProbability”:0.15,“ precipType”:“ rain”},{“ time”:1370614320,“ precipIntensity”:0.243,“ precipIntensityError”:0.102 ,“ precipProbability”:0.16,“ precipType”:“ rain”},{“ time”:1370614380,“ precipIntensity”:0.259,“ precipIntensityError”:0.108,“ precipProbability”:0.17,“ precipType”:“ rain”}, {“ time”:1370614440,“ precipIntensity”:0.262,“ precipIntensityError”:0.108,“ precipProbability”:0.24,“ precipType”:“ rain”},{“ time”:1370614500,“ precipIntensity”:0.28,“ precipIntensityError” :0.115,“ precipProbability”:0.25,“ precipType”:“ rain”},{“时间”:1370614560,“ precipIntensity”:0.3,“ precipIntensityError”:0.12,“ precipProbability”:0.25,“ precipType”:“ rain” },{“ time”:1370614620,“ precipIntensity”:0.322,“ precipIntensityError”:0.125,“ precipProbability”:0.26,“ precipType”:“ rain”},{“ time”:1370614680,“ preci pIntensity“:0.33,” precipIntensityError“:0.125,” precipProbability“:0.33,” precipType“:” rain“},{” time“:1370614740,” precipIntensity“:0.352,” precipIntensityError“:0.131,” precipProbability“:0.34 ,“ precipType”:“ rain”},{“ time”:1370614800,“ precipIntensity”:0.375,“ precipIntensityError”:0.136,“ precipProbability”:0.34,“ precipType”:“ rain”},{“ time”:1370614860 ,“ precipIntensity”:0.38,“ precipIntensityError”:0.14,“ precipProbability”:0.42,“ precipType”:“ rain”},{“ time”:1370614920,“ precipIntensity”:0.402,“ precipIntensityError”:0.147,“ precipProbability” :0.42,“ precipType”:“ rain”},{“ time”:1370614980,“ precipIntensity”:0.425,“ precipIntensityError”:0.154,“ precipProbability”:0.42,“ precipType”:“ rain”},{“ time” :1370615040,“ precipIntensity”:0.432,“ precipIntensityError”:0.157,“ precipProbability”:0.5,“ precipType”:“ rain”},{“ time”:1370615100,“ precipIntensity”:0.454,​​“ precipIntensityError”:0.164,“ precipProbability“:0.5,” precipType“:” rain“},{” time“:1370615160,” precipIntensity“:0.477,” precipIntensityError“:0.168,” precipProbabi lity“:0.5,” precipType“:” rain“},{” time“:1370615220,” precipIntensit

调用Forecast Api测试类的方法

    public void weatherLike()
{
    StrictMode.enableDefaults();
    MyLocation myLocation = new MyLocation();
    myLocation.getLocation(MyService.this, new LocationResult() {
        ForecastIO fio = null;
            @Override
            public void gotLocation(Location location) {
                try {
                double latitude = location.getLatitude();
                double longitude = location.getLongitude();

                fio= new ForecastIO("[API_KEY]");

            } catch (Exception e) {
                speakOut(user + ", I am not able to locate you");
                e.printStackTrace();
            }finally
            {

                System.out.println("Latitude: "+fio.getLatitude());
                System.out.println("Longitude: "+fio.getLongitude());
                System.out.println("Timezone: "+fio.getTimezone());
                System.out.println("Offset: "+fio.offsetValue());
                System.out.println("\n");

            }
            }
        }); 
}

感谢所有答案。 我发现My LogCat正在处理长消息,这也怪不得我从未显示完整答复。

万一有人遇到同样的问题。 使用此代码将字符串回复拆分为多个部分

if (sb.length() > 4000) {
            Log.v("length", "sb.length = " + sb.length());
            int chunkCount = sb.length() / 4000;     // integer division
            for (int i = 0; i <= chunkCount; i++) {
                int max = 4000 * (i + 1);
                if (max >= sb.length()) {
                    Log.v("1st", "chunk " + i + " of " + chunkCount + ":" + sb.substring(4000 * i));
                } else {
                    Log.v("2nd", "chunk " + i + " of " + chunkCount + ":" + sb.substring(4000 * i, max));
                }
            }
        }

BufferedReader使用'buffer',因此您必须使用'flush method'(或close方法)引用链接: http : //docs.oracle.com/javase/tutorial/essential/io/buffers.html

尝试这个

        public static String getResponseText(String stringUrl) throws IOException
{
    StringBuilder response  = new StringBuilder();

    System.out.println("webservice 1");
    URL url = new URL(stringUrl);
    HttpURLConnection httpconn = (HttpURLConnection)url.openConnection();
    if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK)
    {
        System.out.println("webservice 2");
        BufferedReader input = new BufferedReader(new InputStreamReader(httpconn.getInputStream()),8192);
        String strLine = null;
        while ((strLine = input.readLine()) != null)
        {
            response.append(strLine);
        }
        input.close();
    }
    return response.toString();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM