gpt4 book ai didi

java - 无法从 GoogleWeather API 获取内容长度

转载 作者:行者123 更新时间:2023-11-29 06:00:32 25 4
gpt4 key购买 nike

我有一个 Android 应用程序,我想显示下载天气数据的进度条。我会显示大约 5 个地方的天气预报。问题是当我想从响应 header 中获取 Content-Length 时。日志总是显示 -1(这意味着该字段未在 URLConnection 变量中设置)。

这是我正在使用的代码:

private class DownloadWeatherData extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... sUrl) {
try {
URL url = new URL("http://www.google.com/ig/api?weather=NY&hl=en&oe=utf-8");
URLConnection connection = url.openConnection();

int dataLenght = connection.getContentLength();
Log.d("ANDRO_ASYNC", "Data lenght: " + dataLenght);

InputStream input = new BufferedInputStream(url.openStream());

byte data[] = new byte[1024];
long total = 0;
int count;

while ((count = input.read(data)) != -1) {
total += count;
Log.d("ANDRO_ASYNC", ""+(int)((count)));
}
input.close();
} catch (Exception e) {
}
return null;
}
}

我能做什么?还是有其他方式显示下载数据的进度?

最佳答案

问题出在android的HttpUrlConnection实现机制上。这是 what the official documentation says :

默认情况下,HttpURLConnection 的实现要求服务器使用 gzip 压缩。由于 getContentLength() 返回传输的字节数,您不能使用该方法来预测可以从 getInputStream() 读取多少字节。相反,读取该流直到它耗尽:当 read() 返回 -1 时。可以通过在请求 header 中设置可接受的编码来禁用 Gzip 压缩:

urlConnection.setRequestProperty("Accept-Encoding", "identity");

关于java - 无法从 GoogleWeather API 获取内容长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10294897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com