2016-04-14 14 views
1

私はAndroidプログラミングを初めて使い、XMLデータを取得しようとするとgetContentLength()-1を返す理由について助けを求めます。getContentLengthはXMLファイルを取得しようとすると-1を返します

XMLのURLが

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

「フィールドが設定されていないか、intとして表現できない場合-1' '」それが理由ですので、 –

+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

関連する問題