2014-12-19 3 views
0

My MainActivity вызывает HandleWebPage.init(), чтобы загрузить и проанализировать ссылку на веб-страницу. После вызова init() я получаю набор строк (3 строки). Каждая строка отображается в отдельном фрагменте (первый фрагмент по умолчанию с первой строкой). Другие фрагменты можно выбрать с помощью навигационного ящика.показать значок загрузки при обработке веб-страницы

Проблема. Я пытаюсь добавить диалог прогресса, который должен показывать значок загрузки (вращающийся круг) до тех пор, пока не будет обработано Handle Webpage.init().

Функция init() внутренне вызывает 2 задачи async; Один для загрузки веб-страницы, а второй - для обработки веб-страницы с помощью jsoup для получения над строками.

Как добавить диалог прогресса, чтобы функция init() обрабатывалась и возвращалась в MainActivity?

Я попытался добавить init() в AsyncTask и поставить диалог выполнения в onPreExecution и т. Д., Не работал. Также попытался создать progressdialog.show(), затем создать поток и запустить и вызвал init() не получилось. Я хотел бы знать, что будет правильным решением. Ниже приведен фрагмент кода.

MainActivity.java /// ------------snip 
if(savedInstanceState == null) { 
      updateYearMonthDay(); //gets year, month, day 
      //hwp is instance of HandleWebPage class 
      // hwp.init() internally downloads a webpage and process 
      // This takes some time and I require to show some progress around this 
      hwp.init(year, month, day); 
      // after complete i get 3 strings which is processed further in below function 
      updateMetaData(); 
      // this show first fragment with fist string in text view. 
      SelectItem(0); 

     } 

HandleWebPage.java 
-------------------- 
public void init() 
{ 
      doc = downloadPage(); 
      if (doc != null) { 
        extractlinks(doc); 
      } 
// some other function which uses AsyncTask as 
String = new getmoreInfo().execute(dataString1).get(); 
} 

public Document downloadPage() 
{ 
try { 
     doc = new getWebPage().execute(urlString).get(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return doc;  
} 

public class getWebPage extends AsyncTask<String, Document , Document> { 

    @Override 
    protected void onPreExecute() { 
    } 

    @Override 
    protected Document doInBackground(String... params) { 
     try { 
      doc = Jsoup.connect(params[0]).timeout(0).get(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     if(doc == null) { 
      return null; 
     } else 
      return doc; 
    } 

    @Override 
    protected void onPostExecute(Document doc1) { 
     super.onPostExecute(doc1); 
    } 
}; 

public void extractLinks(Document doc) 
{ 
// code to process doc using jsoup and update respective String in this class. 
} 

ответ

0

Вы можете, вероятно, объединить два AsyncTask S, которые вы выполняете последовательно в один AsyncTask. Для отображения индикатора прогресса в течение AsyncTask, инициализируйте индикатор прогресса с видимостью GONE при создании активности. Затем установите видимость на VISIBLE в методе onPreExecute()AsyncTask и установите его на GONE в onPostExecute().

+0

спасибо. Вы имеете в виду, мне нужно создать AsyncTask в MainActivity и переместить hwp.init() в doInbackground() из этого и показать диалог выполнения в onPreExecute() и отклонить его onPostExecute() ??. Это означает вызов AsyncTask From MainActivity, где doInBackground(), который внутренне вызывает другую AsyncTask (через hwp.init()) правильно ..? –

+0

Да, за исключением того, что вам не нужно вызывать другую AsyncTask из doInBackground первой AsyncTask - вы можете удалить AsyncTask из метода init() – Price

+0

Спасибо. Я попробую это и посмотрю, получаю ли я ожидаемый результат –

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