Я пытаюсь загрузить источник 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, но моя первая задача работает отлично. Что я могу сделать по этому поводу, спасибо.
О, я не знал, что спасибо. Так что я удалю get и я добавлю операцию синтаксического анализа в onPostExecute правильно? – Alperen
Ну, вы должны делать много времени в doInBackGround. Итак, синтаксический анализ тоже. – greenapps
Хорошо, спасибо за ответ. – Alperen