2013-04-20 122 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方法结束时启动该线程变量