connection.getContentLength()为负值

后台:PHP

客户端:Android。


下载apk的时候,需要更新下载进度。

但是connection.getContentLength()的值一直是-1,后台的人(做客户端的都知道呵呵。。)估计也没听懂,不在一个地方办公。


木有办法,只有先自己弄下,找度娘,到时看到个

类似的解决方案

加上

connection.setRequestProperty("Accept-Encoding", "identity");
connection.connect();


试了试,不行,还是-1。

然后我去百度随便找了个图片,复制地址,查看了下connection.getContentLength()也是-1。的了,很可能是我程序的问题,找.......

偶然看到个网上资料回答里面,有个哥们,说,connection.getContentLength()只能在Post方式里面返回,get不返回,(不知道对错)

我就加了句代码:

connection.setRequestMethod("POST");

OK,百度的那个图片地址, connection.getContentLength()有值了。

然后我在用我们后台给的地址,还是不行,是-1.


那就是后台的问题了,需要设置,Content-Length。


1.但是后台只设置了Accept-Length,和Accept-Ranges

一个是文件长度,一个是文件长度的单位。

这里要说一下怎么取值。

easy (当初我是试了一会,才找出来的,⊙﹏⊙)

String b = connection.getHeaderField("Accept-Length");
int c = connection.getHeaderFieldInt("Accept-Length", 0);

ps:上面这2句2选1就行了,

这样就行了。

同样可以取到文件的长度。

前提条件:后台返回给你了,他设置了这几个属性,才行。


2.其实这个要说的前面已经提到了,直接让后台设置属性“Content-Length

这样,客户端,取的时候,直接用connection.getContentLength()就可以了。


反正我用http://my.oschina.net/u/133352/blog/96582这哥们的,不行,花费了些时间,才解决这个问题,写下来,防止忘记和留给同样疑惑的朋友。


最后,贴一下正确的代码

package aaa.test;

import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUrlTest {

	public static void main(String[] args) {

		try {
			String downLoadUrl = "后台给的url";
			// String downLoadUrl =
			// "http://image.baidu.com/i?ct=503316480&z=0&tn=baiduimagedetail&ipn=d&word=%E6%8F%90%E8%8E%AB&step_word=%E6%8F%90%E8%8E%AB&pn=115&spn=0&di=152269112710&rn=1&is=&istype=&ie=utf-8&oe=utf-8&in=5654&cl=2&lm=-1&st=&cs=804657554%2C2931287498&os=1811218947%2C3686935365&ln=1000&fr=&fmq=1410849622013_R&ic=&s=&se=&sme=0&tab=&width=&height=&face=&ist=&jit=&cg=&objurl=http%3A%2F%2Fimg4.5652.com%2F2012%2F12%2F8%2Fe09d67133a9194c36a2c9de018a9b1dc.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fs5s_z%26e3Bcmcd_z%26e3Bv54AzdH3FgjofAzdH3Fs5sAzdH3F8nb8na_z%26e3Bip4s";

			URL url = new URL(downLoadUrl);
			// 打开连接
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();

			connection.setRequestMethod("POST");

			connection.setRequestProperty("Accept-Encoding", "identity");
			connection.connect();

			long a = connection.getContentLengthLong();
			String b = connection.getHeaderField("Accept-Length");
			int c = connection.getHeaderFieldInt("Accept-Length", 0);

			// 文件总大小
			double fileSize = connection.getContentLength();
			System.out.println("fileSize====" + fileSize);
			System.out.println("a====" + a);
			System.out.println("b====" + b);
			System.out.println("c====" + c);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值