繁体   English   中英

如何将Gzip流响应Okhttp3转换为JSON

[英]How to convert Gzip Stream response Okhttp3 into JSON

如何将GZip转换为JSON?

我的代码是这样的:

private FileContentModel getDbData(String url)throws ApiException, IOException, ConnectionException {
        TypeToken<FileContentModel> typeToken = new TypeToken<FileContentModel>() {};
        return getData(url, getPostModel(), typeToken);
}



private <T> T getData(String url, PostModel postModel, TypeToken<T> typeToken) throws ApiException, IOException, ConnectionException {
        Response response = new CallApi<T>(Connection.getOfficeApiUrl(context))
                .Post(url, postModel);

        if (response.code() != 200) throw new ApiException(context, response);

        Gson gson = new GsonBuilder()
                .setLenient()
                .create();

        T obj = gson.fromJson(response.body().charStream(),
                typeToken.getType());
        return obj;
}

public Response Post(String route, Object object) throws IOException  {

    Gson gson = new Gson();
    RequestBody body = RequestBody.create(MediaType.parse(MIME_JSON), gson.toJson(object));

    Request request = new Request.Builder()
            .url(baseUrl + route)
            .post(body)
            .addHeader("Accept-Encoding", "gzip")
            .build();

    return okHttpClient.newCall(request).execute();
}

感谢pskink

private <T> T getData(String url, PostModel postModel, TypeToken<T> typeToken) throws ApiException, IOException, ConnectionException {
        Response response = new CallApi<T>(Connection.getOfficeApiUrl(context))
                .Post(url, postModel);

        if (response.code() != 200) throw new ApiException(context, response);

        Gson gson = new GsonBuilder()
                .setLenient()
                .create();

        GZIPInputStream gzis = new GZIPInputStream(response.body().byteStream());
        InputStreamReader reader = new InputStreamReader(gzis);
        BufferedReader in = new BufferedReader(reader);
        List<BranchModel> obj =   gson.fromJson(reader,
            new TypeToken<List<BranchModel>>(){}.getType());
        return obj;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM