Nachrüstung + OkHttp + GZIP-ed JSON

8

Ich bin neu bei Retrofit, aber es scheint wirklich mächtig zu sein. Alles funktioniert gut mit einem normalen JSON, aber sobald ich ein GZIPed versuche, bekomme ich nur einen Fehler:

  

I / System.out (14883): ------ Retrofit.RetrofitError:   retrofit.converter.ConversionException:   com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:   Erwartete BEGIN_OBJECT aber war STRING in Zeile 1 Spalte 1

Offensichtlich können die Kauderwelschsymbole, die ich im Log sehe, nicht als JSON geparst werden.

Ich dachte, okHttp ist das gzip Zeug richtig einholen? Was vermisse ich?

Diese Gläser befinden sich in meinem libs-Ordner:

%Vor%

So fange ich den Anruf an:

%Vor%

Die result: -Zeile wird nie angezeigt, stattdessen sehe ich viele dieser Sachen T�� �����=�Mk�A�G�4.��@��A�� im RetrofitLog. Was mache ich falsch, dass das gzip nicht dekomprimiert wird? Danke!

Bearbeiten:

Ich habe es mit einer gzip-Datei auf meinem Testserver versucht ( server.com/ovl.gz ) und ich habe es auch mit dem ursprünglichen api-Server versucht ( server2.com/api.php?id=ovlgzip ). Gleiches Ergebnis, aber verschiedene Header:

Testserver:

%Vor%

Ursprünglicher Server:

%Vor%     
A2i_ 09.07.2014, 16:41
quelle

2 Antworten

4

Danke an Jake Whartons Kommentar es stellte sich heraus, dass der Content-Encoding: gzip Header fehlte . Da ich dem Server sagte, diese Header hinzuzufügen, funktioniert alles gut:

%Vor%     
A2i_ 10.07.2014, 13:07
quelle
2

Wenn Sie eine gezippte Datei mit der Erweiterung .gz herunterladen, verwenden Sie Apache und Sie haben mod_mime aktiviert. Dann können Sie diese Anweisung zum virtuellen Host oder zur .htaccess-Datei hinzufügen:

%Vor%

Wenn Sie eine Datei mit der Endung .gz anfordern, fügt apache automatisch den Header "Content-Encoding: gzip" zur Antwort hinzu (Dateiausgabe) und okhttp decodiert automatisch den Antworttext .

    
Qlimax 28.09.2014 17:00
quelle

Tags und Links