我可以使用以下代码下载较小的JSON响应:
public String getHTTPData() {
HttpURLConnection httpURLConnection = null;
InputStream inputStream = null;
try {
httpURLConnection = (HttpURLConnection) (new URL(BASE_URL)).openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setDoInput(true);
httpURLConnection.connect();
StringBuffer stringBuffer = new StringBuffer();
inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line + "\n");
}
inputStream.close();
httpURLConnection.disconnect();
} catch (Throwable t) {
t.printStackTrace();
} finally {
try {
inputStream.close();
httpURLConnection.disconnect();
} catch (Throwable t) {
t.printStackTrace();
}
}
return null;
}
但是当我找不到某个API(中文字典API)时,我想我也可以解析我需要的数据的HTML源代码。但我似乎只得到源代码的前100行。我必须遗漏一些非常简单的东西,比如'maxLength'HTTP参数或超时。在SO中没有找到任何内容,也尝试了Google here建议的代码并遇到了同样的问题。我不确定如何进一步调试这个,我看到输入流干了并返回'-1'(在'readStream'中尝试了不同的maxLength块并得到了更小的块,但最后仍然干涸),所以我假设它是URLConnection没有交付。或者它可能是我的输入流代码有问题?顺便说一下,这是一个https网址,但由于我确实得到了一些初始数据,我认为这不是一个协议问题(希望我能有点智能地总结一下......)
答案 0 :(得分:0)
在线程中运行代码而不是在主线程上运行代码是一种很好的做法。 另外请将此添加到您的请求中:
httpURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
httpURLConnection.setRequestProperty("Accept-Charset", "UTF-8");
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
然后检查响应代码:
if (responseCode == HttpURLConnection.HTTP_OK) {
}
不要忘记将Internet权限添加到清单文件中:
<uses-permission android:name="android.permission.INTERNET" />