2016-04-14 30 views
1

我是Android新手,希望獲得一些幫助,以瞭解爲什麼getContentLength()返回-1當我嘗試獲取XML數據時。getContentLength在嘗試獲取XML文件時返回-1

的XML網址是

String url = "http://www.systembolaget.se/api/assortment/products/xml"; 

int count; 
       try { 
       URL url = new URL(aurl[0]); 
       URLConnection conexion = url.openConnection(); 
       conexion.connect(); 

       int lengthOfFile = conexion.getContentLength(); 
       Log.d("ANDRO_ASYNC", "Lenght of file: " + lengthOfFile); 

       InputStream input = new BufferedInputStream(url.openStream(), 10240); 
       File fileDir = getFileFolder(AndroAsync.this); 
       File file = new File (fileDir, "systembolaget.xml"); 
       FileOutputStream outputStream = new FileOutputStream(file); 


       byte data[] = new byte[4096]; 

       long total = 0; 

       while ((count = input.read(data)) != -1) { 
        total += count; 
        publishProgress(""+(int)((total*100)/ lengthOfFile)); 
        outputStream.write(data, 0, count); 
       } 

       outputStream.flush(); 
       outputStream.close(); 
       input.close(); 

所有幫助是非常讚賞
謝謝! :)

+1

文件說,它返回「'-1'如果該字段未設置或無法表示爲int」,所以這就是原因 –

+0

是的,我已閱讀文檔,但我不明白他們的意思由此它不能被表示爲一個int。 – speccaN

+0

如果它對於int而言太大,則不能將其表示爲int,但更有可能它根本沒有設置。 – EJP

回答

1

該服務器不發送內容長度,原因是它使用分塊傳輸編碼。

HTTP/1.1 200 OK 
Cache-Control: max-age=78517 
Content-Type: application/xml; charset=utf-8 
ETag: "bb83f8d6-d015-4df5-a8f6-e37248d8a812" 
Server: Microsoft-IIS/8.5 
X-Cached: True 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 
X-Content-Type-Options: nosniff 
Date: Thu, 14 Apr 2016 05:11:22 GMT 
X-Cnection: close 
Set-Cookie: lbsession=rd10o00000000000000000000ffff91fbfd15o80; path=/ 
X-Server: 21 
Vary: Accept-Encoding 
Transfer-Encoding: chunked 
+0

好的!那麼你知道是否有不同的方式來實現我想要的嗎?我想知道內容長度,因爲我想在進度條上使用ProgressDialog。 – speccaN

相關問題