线程未执行后的代码

时间:2013-04-20 21:52:38

标签: java android

我正在为Android应用程序提取一些html。我遇到的一个问题是,下面代码中的线程之后的代码没有被执行。我觉得我犯了一个业余错误,但我不知道它是什么。我知道arraylists正在填充,从在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

3 个答案:

答案 0 :(得分:2)

我猜你来自传统的java开发,所以这里有一个警告:Threads和Android不喜欢彼此。将您的主题切换到Async Task并再试一次,只需更改几行代码。

基本上,将所有代码复制到doInBackground()方法,然后调用task.execute()。 您要对生成的数据执行的所有操作都应该进入Async任务的onPostExecute()方法。您甚至可以使用publishResult()onResultPublished()进行并行处理 请注意,这可能会同步运行,但您不必担心这一点。

答案 1 :(得分:1)

由于你没有在线程之后做任何UI工作,你不能在finally子句中完成工作吗?

如果您依靠此线程收集数据以填充视图,则应使用AsyncTask。

答案 2 :(得分:0)

尝试将线程分配给变量并在onCreate方法结束时启动该线程变量