2017-02-11 1 views
1

HTMLソースをダウンロードし、それを使用するためにテキストを抽出しようとしています.HTMLはテーブルに入っていません。それを抽出し、私はそれを抽出するためにパターンと正規表現を使用して正規表現を使用しています。私はダウンロードして2回タスクを解析しています。最初のタスクは何の問題もなく素晴らしいですが、私はフレームをスキップし、メインスレッドではあまりにも多く、AsyncTaskではこれらの操作は必要ありません。スキップフレームをAsyncTaskでHTML解析を行うと、メインスレッドが遅くなります

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(); 
    } 

} 

多くの人々完全に私のアプリがクラッシュ

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(); 
    } 
} 

第二構文解析タスクを動作し、言う マイAsyncDownloadタスク

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; 
    } 
} 

まず構文解析タスク言うそれはjSoupを使っていますが、私の最初の仕事は完全に実行されています。私はこれについて何ができますか、ありがとう。

答えて

1

.get()メンバを使用してAsyncTaskを実行しないでください。それはメインスレッドで実行されるためです。

doInBackground()の結果をonPostExecute()に入力して処理しないでください。

あなたの最初のタスクも既に間違っています。

+0

私はあなたに感謝していませんでした。私はgetを取り除き、私はonPostExecuteに解析操作を追加しますか? – Alperen

+0

あなたはdoInBackGroundで時間のかかる操作を行うべきです。パッシングもそうです。 – greenapps

+0

お返事ありがとうございました。 – Alperen

関連する問題