【发布时间】:2017-10-20 21:35:42
【问题描述】:
因此,当在较小的页面上运行此代码时,它运行良好。但是当我在更大的页面(例如 Stackoverflow 或其他任何页面)上运行它时,它不会在字符串结果中获得完整的源代码。有什么我没有考虑或做错事吗?谢谢!
示例:对于 StackOverflow,它在源代码的第 35 行停止,只有几个字符,而不是 3000 多行代码。
日志的最后一行:
StackExchange.using("gp
我的代码:
protected void runItNow(View v){
Log.i("INSIDE: ", "runItNow");
DownloadTask downloadTask = new DownloadTask();
String result;
try {
result = downloadTask.execute("http://www.stackoverflow.com/").get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
private class DownloadTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... params) {
URL url;
HttpURLConnection urlConnection;
try{
url = new URL(params[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
urlConnection.setConnectTimeout(250000);
int data;
char[] buffer = new char[4096];
StringBuilder builder = new StringBuilder();
while ((data = reader.read(buffer)) != -1){
builder.append(buffer, 0, data);
}
String results = builder.toString();
Log.i("Results: ", results);
in.close();
reader.close();
urlConnection.disconnect();
return results;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}
【问题讨论】:
-
).get();不要使用 .get()。糟糕的编程!使用 AsyncTask 的 onPostExecute() 来处理结果。 -
感谢您的提示。这就是我通常的做法,但这是 StackSkill 课程的方式。哈哈。
标签: android inputstream httpurlconnection bufferedreader