[英]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.