我目前正在使用android,我正在使用带有一些标头的http连接(我没有包含它们或出于安全目的的真实URL)从API获取JSON响应,并将该响应反馈回应用程序。我遇到的问题是,当使用http请求的getContentLength方法时,返回错误的长度(返回的错误长度为1225,JSON数组的正确字符长度为3365)。
我觉得当我的阅读器开始阅读它时JSON没有完全加载,因此只是在那时读取加载的JSON。有没有办法解决这个问题,可能是在HTTP连接上使用延迟还是等到它完全加载才能读取数据?
URL url = new URL("https://www.exampleofurl.com");
HttpURLConnection request = (HttpURLConnection) url.openConnection();
request.connect();
int responseCode = request.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = request.getInputStream();
InputStreamReader reader = new InputStreamReader(inputStream);
long contentLength2 = Long.parseLong(request.getHeaderField("Content-Length"));
Log.i("contentLength: ", "Content: " + contentLength2);
答案 0 :(得分:0)
我一般不建议总是依赖“内容长度”,因为它可能不可用(你得到-1),或者可能受中间代理的影响。
为什么不直接读取你的流,直到它耗尽到内存缓冲区(比如StringBuilder
)然后得到实际大小,例如:
BufferedReader br = new BufferedReader(inputStream); // inputStream in your code
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
// finished reading
System.out.println("data size = " + sb.length());
JSONObject data = new JSONObject(sb.toString());
// and don't forget finally clauses with closing streams/connections