1
我想下载一个HTML源代码并提取文本以便使用它。但是HTML没有很好地编码它在一张桌子里,我想不出以不同的方式提取它,我用正则表达式与模式和匹配提取它。我正在做下载和解析任务2次。第一个任务做得很好,没有任何问题,但是当我尝试做第二个任务时,它跳过帧,并说你在做什么在主线程上太多,但在AsyncTask中执行这些操作。 我AsyncDownload任务HTML解析使用AsyncTask使主线程缓慢
public class DownloadTheCoursesTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String result = "";
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream input = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(input);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data = reader.read();
}
return result;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
第一解析任务,完美的作品其崩溃我的应用程序
public void getTheCourses() {
DownloadTheCoursesTask coursesTask = new DownloadTheCoursesTask();
String result = "";
try {
result = coursesTask.execute("http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php").get();
coursesResult = new ArrayList<String>();
Pattern firstPattern = Pattern.compile("<option value=\"(.*?)\">");
Matcher firstMatcher = firstPattern.matcher(result);
while (firstMatcher.find()) {
coursesResult.add(firstMatcher.group(1));
}
}catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
第二解析任务,并说跳帧
public void getTheQuota(){
DownloadTheCoursesTask quotaTask = new DownloadTheCoursesTask();
String result = "";
try {
result = quotaTask.execute("http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php?fb=BEB").get();
Pattern p = Pattern.compile("<html><head>(.*?)</html>");
Matcher m = p.matcher(result);
while (m.find()) {
quotaResult.add(m.group(1));
}
}catch (InterruptedException e){
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
很多人说使用jSoup,但我的第一个任务是完美运行。我可以做些什么,谢谢。
哦,我不知道那谢谢你。所以我将删除获得,我会将解析操作添加到onPostExecute的权利? – Alperen
那么你应该在doInBackGround中做耗时的操作。所以解析也是如此。 – greenapps
好的,非常感谢你的回答。 – Alperen