Próbuję sparsować plik z Internetu na Androida przy użyciu metody DOM.Obsługa spakowanych treści gzip na Androidzie
Kod w pytaniu:
try {
URL url = new URL("https://www.beatport.com/en-US/xml/content/home/detail/1/welcome_to_beatport");
InputSource is = new InputSource(url.openStream());
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(is);
document.getDocumentElement().normalize();
} catch(Exception e) {
Log.v(TAG, "Exception = " + e);
}
Ale ja otrzymuję następujący wyjątek:
V/XMLParseTest1( 846):Exception = org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@2:176 in [email protected])
Plik jest przekazany do mnie skompresowane. Sprawdziłem obiekt is
w debugerze, a jego długość wynosi 6733 bajtów (tak samo jak długość zawartości pliku w nagłówkach odpowiedzi), ale jeśli zapiszę plik na moim dysku twardym z przeglądarki, jego rozmiar wynosi 59114 bajtów. Ponadto, jeśli prześlę go na mój własny serwer, który nie zgłasza XML-ów, gdy je obsługuje, i ustawia adres URL, kod działa dobrze.
Zgaduję, że to, co dzieje się w systemie Android, to próba przeanalizowania spakowanego pliku gzip.
Czy istnieje sposób, aby najpierw rozpakować strumień? Jakieś inne pomysły?
spójrz na ten link http://stackoverflow.com/q/6717165/779408. Jest tam reprezentowana metoda kompresji i dekompresji. – breceivemail