2016-04-14 8 views
1

Ich bin neu in der Android-Programmierung und möchte Hilfe bekommen, warum getContentLength()-1 zurückgibt, wenn ich versuche, die XML-Daten zu erhalten.getContentLength gibt -1 zurück, wenn versucht wird, XML-Datei zu erhalten

Die XML-URL ist

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

Alle Hilfe viel
Danke sehr geschätzt wird! :)

+1

Dokumentation sagt, es gibt „' -1', wenn das Feld nicht gesetzt ist oder nicht als int dargestellt werden“, so dass der Grund ist –

+0

Ja ich die Dokumentation gelesen haben, aber ich habe nicht, was sie bedeuten damit kann es nicht als int dargestellt werden. – speccaN

+0

Es kann nicht als ein int dargestellt werden, wenn es für einen int zu groß ist, aber es ist wahrscheinlicher, dass es überhaupt nicht gesetzt ist. – EJP

Antwort

1

Dieser Server sendet keine Inhaltslänge, und der Grund ist, dass es chunked Transfer-Codierung verwendet.

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

Okay! Wissen Sie also, ob es eine andere Art der Umsetzung gibt, was ich will? Ich wollte Inhaltslänge wissen, weil ich einen ProgressDialog mit einem Fortschrittsbalken verwenden möchte. – speccaN

Verwandte Themen