Невозможно разобрать ответ gzip с сервера, используя модифицированный Android - PullRequest
0 голосов
/ 05 октября 2018
      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 путь $

...