2012-05-17 2 views
0

J'essaie d'obtenir des données compressées du serveur. Le gars qui a programmé le serveur m'a dit, qu'il utilise la bibliothèque ZLIB sur son iPhone, et le gzcompress sur le serveur. J'essayais de trouver un moyen approprié pour obtenir ces données, mais il finit avec info "java.io.IOException: format inconnu (nombre magique 9c78)" lors de la création de l'objet GZIPInputStream. Enfin, j'ai atteint le point, où j'avais des données en tant que chaîne. Il a été compressé, j'ai donc utilisé cette réponse pour décompresser: https://stackoverflow.com/a/6963668/419308. Mais ce code ne fonctionne pas. "in.read()" renvoie -1 au début.Android - téléchargement de la réponse compressée à partir de http

Quelqu'un a une idée de la raison pour laquelle il y a -1? Ou peut-être un meilleur moyen d'obtenir les données compressées?

EDIT: J'ai essayé d'ajouter un fichier au projet et de le lire dans ce fichier. in.read() n'a pas retourné -1

EDIT2: Selon jJ's answer J'ai essayé ce code:

HttpGet request = new HttpGet(urlTeam); 
HttpResponse response = new DefaultHttpClient().execute(request); 
HttpEntity entity = response.getEntity(); 

InputStream stream = AndroidHttpClient.getUngzippedContent(entity); 

InputStreamReader reader = new InputStreamReader(stream); 
BufferedReader buffer = new BufferedReader(reader); 

StringBuilder sb = new StringBuilder(); 
sb.delete(0, sb.length()); 
String input; 
while ((input = buffer.readLine()) != null) 
{ 
    sb.append(input); 
} 

Mais la réponse est toujours compressé (ou illisible)

+0

-1 est retourné s'il n'y a rien à lire – pengibot

+0

afin que le code est incorrect? Je suis sûr que la chaîne passée n'était pas vide – Seraphis

+0

de l'API "le nombre réel d'octets lus, ou -1 si la fin du flux d'entrée compressé est atteint" – pengibot

Répondre

0

sur android vous devez utiliser soit HttpURLConnection qui gère la décompression (et les en-têtes d'encodage http) pour vous à partir de GingerBread ou AndroidHttpClient (pour les versions android plus anciennes) qui a des méthodes auxiliaires comme getUngzippedContent et modifyRequestToAcceptGzipResponse.

Ceci est un bon résumé Android HTTP clients

+0

J'ai mis à jour la question avec du code contenant AndroidHttpClient, ce qui ne m'apporte toujours rien .. Peut-être qu'il y a quelque chose de mal? – Seraphis

+1

J'ai utilisé la méthode getUngzippedContent() de la classe AndroidHttpClient. Le problème est que cela ne marchera pas sur les androïdes inférieurs, mais je téléchargerai des données non compressées :-) Merci pour vos guides, jj :-) – Seraphis

Questions connexes