2013-04-20 120 views
2

我正在爲一個android應用程序提取一些html。我遇到的一個問題是,下面的代碼中的線程之後的代碼未被執行。我覺得我正在犯一個業餘的錯誤,但我不知道它是什麼。我知道arraylist正在被填充,從將其內容打印到createTimetable()方法中的logcat中。 但}).start();之後的任何內容都沒有完成。有任何想法嗎?線程未被執行後的代碼

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_online_timetable); 
    Intent intent = getIntent(); 
    value = intent.getStringExtra("url"); 


     new Thread(new Runnable() { 
      public void run() { 
       try { 
        Log.d("url",value); 
        doc = Jsoup.connect(value).get(); 
        Element monday = doc.select("p ~ table").first(); 
        Element tuesday = doc.select("p ~ table").get(1); 
        Element wednesday = doc.select("p ~ table").get(2); 
        Element thursday = doc.select("p ~ table").get(3); 
        Element friday = doc.select("p ~ table").get(4); 

        monday.select("tr:eq(0)").remove(); 
        tuesday.select("tr:eq(0)").remove(); 
        wednesday.select("tr:eq(0)").remove(); 
        thursday.select("tr:eq(0)").remove(); 
        friday.select("tr:eq(0)").remove(); 


        final Elements mon = monday.select("td"); 
        final Elements tues = tuesday.select("td"); 
        final Elements wed = wednesday.select("td"); 
        final Elements thurs = thursday.select("td"); 
        final Elements fri = friday.select("td");    

        Log.d("thread","sdsddssd"); 
        createTimetable(monClasses, mon, day1); 
        createTimetable(tuesClasses, tues, day2); 
        createTimetable(wedClasses, wed, day3); 
        createTimetable(thurClasses, thurs, day4); 
        createTimetable(friClasses, fri, day5); 


       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      }).start(); 


     Log.d("sdfsdfsdf", "HELLO"); 
     for(int i = 0; i<monClasses.size();i++) 
     { 
      Log.d("monday", monClasses.get(i).toString()); 
     } 


    mSectionsPagerAdapter = new SectionsPagerAdapter(
      getSupportFragmentManager()); 

} 

logcat

+0

您可以發佈logcat的輸出嗎? – 2013-04-20 21:58:43

+0

您應該嘗試減少您發佈到最小片段的代碼,以便重現您的問題。這顯然與本週的日子無關,所有這一切使得這個問題不愉快通過 – slezica 2013-04-20 21:59:32

+0

logcat圖像添加 – user2236580 2013-04-20 22:09:59

回答

2

我猜你是來自傳統的Java開發所以這裏提醒一句:線程和Android不喜歡對方。將您的線程切換到Async Task並再試一次,這只是幾行代碼才能更改。

基本上,將所有代碼複製到doInBackground()方法,然後調用task.execute()。 您想要對生成的數據執行的任何操作都應該放入異步任務的onPostExecute()方法中。您甚至可以使用publishResult()onResultPublished() 執行並行處理請注意,這可能會同步運行,但您不必擔心這一點。

+0

好吧,我會試試這個asynctask。它看起來有點亂,但我會弄清楚。 – user2236580 2013-04-20 22:35:54

+0

異步任務是Android上的方式,我不會稱他們凌亂 – meredrica 2013-04-21 10:41:48

1

既然你沒有在線程之後做任何UI工作,你不能在finally子句中做這項工作嗎?

如果你依靠這個線程來收集數據來填充視圖,你應該使用AsyncTask。

+0

這似乎解決了我的問題,謝謝。 – user2236580 2013-04-20 22:35:07

0

嘗試將線程分配給變量並在onCreate方法結束時啓動該線程變量