Ich bin neu in Retrofit, aber es scheint wirklich mächtig. Alles funktioniert mit einem normalen JSON in Ordnung, aber sobald ich versuche, eine GZIPed eines bekomme ich nur einen Fehler:Retrofit + OkHttp + GZIP-ed JSON
I/System.out(14883): ------retrofit.RetrofitError: retrofit.converter.ConversionException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1
Offensichtlich ist die die unsinnigen Symbole ich im Log können nicht sehen, wie JSON analysiert werden.
Ich dachte, okHttp ist das gzip Zeug richtig einholen? Was fehlt mir?
Diese Gläser sind in meinem libs Ordner:
retrofit-1.6.1.jar
okhttp-2.0.0.jar
gson-2.2.4.jar
So kann ich den Anruf bin ab:
public interface OvlService {
@GET("/gziptest.gz")
void getOvls(Callback<OvlWrapper> callback);
}
...
OkHttpClient okHttpClient = new OkHttpClient();
Executor executor = Executors.newCachedThreadPool();
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://my.domain") // The base API endpoint.
.setLogLevel(RestAdapter.LogLevel.FULL)
.setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.build();
OvlService ovlService = restAdapter.create(OvlService.class);
ovlService.getOvls(new Callback<OvlWrapper>() {
@Override
public void success(OvlWrapper arg0, Response arg1) {
System.out.println("result: " + arg0.toString());
}
});
Die result:
-Linie wird niemals angezeigt, sondern ich sehe viele davon Sachen T�� �����=�Mk�A�G�4.��@��A��
im RetrofitLog. Was mache ich falsch, dass das gzip nicht dekomprimiert wird? Vielen Dank!
Edit:
Ich versuchte es mit einer gzip-Datei auf meinem Testserver (server.com/ovl.gz
) und ich versuchte es auch mit dem Original-api-Server (server2.com/api.php?id=ovlgzip
). Gleiches Ergebnis, aber unterschiedliche Header:
Testserver:
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: close
Content-Length: 477
Content-Type: application/x-gzip
ETag: "2cc40cb-1dd-..."
Last-Modified: Tue, 08 Jul 2014 17:00:08 GMT
OkHttp-Received-Millis: 1404950522590
OkHttp-Response-Source: NETWORK 200
OkHttp-Selected-Transport: http/1.1
OkHttp-Sent-Millis: 1404950522533
Server: Apache
�������������}�Qk�0���...
Original-Server:
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Type: application/json
Keep-Alive: timeout=4, max=1000
OkHttp-Received-Millis: 1404950697627
OkHttp-Response-Source: NETWORK 200
OkHttp-Selected-Transport: http/1.1
OkHttp-Sent-Millis: 1404950697002
Server: Apache
Transfer-Encoding: chunked
X-Powered-By: PHP/5.3.3-7+squeeze19
�������������}�Qk�0���...
Wie sehen die Antwortheader aus? –
Die Antwort-Header oben hinzugefügt. Ich spielte auch mit 'RequestInterceptor' herum - aber ohne Erfolg ... –
Die Kopfzeile meldet, dass die Antwort eine gzip-Datei ist, nicht, dass die Antwort gezippt wird. Wenn die Antwort gezippt wurde, würde ein Header "Content-Encoding: gzip" vorhanden sein. –