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();
		}

	}

}

























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章