2013-04-20 4 views
2

Я работаю над извлечением некоторого html для приложения для Android. Проблема в том, что код после потока в приведенном ниже коде не выполняется. Я чувствую, что делаю ошибку любителя, но я не понимаю, что это такое. Я знаю, что аррайалисты заполняются, от печати их содержимого до logcat в методе createTimetable(). Однако ничего после }).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? –

+0

Вам следует попытаться уменьшить код, который вы публикуете, до минимального фрагмента, который будет воспроизводить вашу проблему. Это не имеет ничего общего с днями недели, все, что делает вопрос неприятным для чтения – slezica

+0

logcat image добавлено – user2236580

ответ

2

Я предполагаю, что вы из традиционной разработки Java, так вот слово предупреждения: Нити и Android не похожи друг на друга. Переключите свою нить в Async Task и повторите попытку, это всего лишь несколько строк кода для изменения.

В принципе, скопируйте весь свой код в метод doInBackground(), а затем позвоните по телефону task.execute(). Все, что вы хотите сделать с данными, которые были сгенерированы, должно войти в метод onPostExecute() задачи Async. Вы можете даже выполнить параллельную обработку, используя publishResult() и onResultPublished() Обратите внимание, что это может работать синхронно, но вам не стоит беспокоиться об этом.

+0

Хорошо, я попробую эту асинтезу. Это выглядит немного грязно, но я все выясню. – user2236580

+0

асинхронные задачи - это путь к андроиду, я бы не назвал их беспорядочными – meredrica

1

Поскольку вы не работаете с пользовательским интерфейсом после того, как поток не может выполнить работу в объявлении finally?

Если вы полагаетесь на этот поток для сбора данных для заполнения представлений, вы должны использовать AsyncTask.

+0

Это, похоже, решило мою проблему, спасибо. – user2236580

0

пытаются присвоить нить переменной и начать эту переменную нить в конце метода OnCreate

Смежные вопросы