final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(30, TimeUnit.SECONDS)
.connectTimeout(30, TimeUnit.SECONDS)
.addInterceptor(new GzipRequestInterceptor())
.build();
@Headers({
"Content-Type: application/json;charset=utf-8",
"Accept: application/json"
})
@Streaming
@POST("updateContent")
Это заголовок, который я использую для получения сжатого Gzip-ответа от сервера.
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(BASE_URL)
.client(okHttpClient)
.build();
Это модифицированный объект, который я использую.
Я получаю этоошибка «Документ JSON не был использован полностью»
Но если я делаю так, это работает:
ResponseHandler responseHandler = new BasicResponseHandler();
String response = (String) httpclient.execute(httpPost, responseHandler);
if (response != null && !"".equalsIgnoreCase(response)) {
String new_response = null;
byte[] zbytes = response.getBytes("ISO-8859-1");
// Add extra byte to array when Inflater is set to true
byte[] input = new byte[zbytes.length + 1];
System.arraycopy(zbytes, 0, input, 0, zbytes.length);
input[zbytes.length] = 0;
ByteArrayInputStream bin = new ByteArrayInputStream(input);
InflaterInputStream in = new InflaterInputStream(bin);
ByteArrayOutputStream bout = new ByteArrayOutputStream(1024);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(bout);
IOUtils.copy(in, bufferedOutputStream);
in.close();
bufferedOutputStream.close();
new_response = bout.toString();
responseJsonData = new JSONObject(new_response);
Но мне нужно сделать это дооснащением, которое выдает ошибку.Включите для анализа zip-данных, поступающих с сервера, при использовании модификации в качестве gzip-распаковки в автоматическом режиме при модификации.
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидается BEGIN_OBJECT, но былоSTRING в строке 1 столбца 1 путь $