2013-05-23 5 views
0

в моем приложении Мне нужно выполнить сетевые операции, поэтому я сделал класс AsyncTask, чтобы выполнить его на фоне, но затем мне нужно заполнить некоторое текстовое изображение информацией, которую я получил.wait in the main thread for AsyncTask

Так что мой вопрос, что я могу сделать в главном потоке, чтобы ждать AsyncTask класс закончить doInBackground операции

Это мой AsyncTask класс:

public class ObtenerDatos extends AsyncTask<Void, Void, Void> { 

    private PuertosSaxParser saxparser; 
    private ArrayList<clsPuertos> Puertos; 

    /** Return the Puertos info to the main class */ 
    public ArrayList<clsPuertos> getPuertos() { 
     return Puertos; 
    } 

    /** Get the XML info and do the parse */ 
    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      saxparser = new PuertosSaxParser("http://www.androide.comyr.com/valores.xml"); 
      Puertos = saxparser.parseXML(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

} 

И это как я называю это из основной резьбы:

try { 
    int_datos.execute(); 
    //HERE I NEED TO WAIT FOR THE AsyncTask TO COMPLETE THE doInBackground OPERATIONS 
    Puertos = int_datos.getPuertos(); 
    //THEN I FILL THE TEXTVIEWs WITH THE INFO OF Puertos 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Спасибо за помощь!

EDIT:

MainClass:

ObtenerDatos int_datos = new ObtenerDatos(this); 
int_datos.execute(); 

ObtenerDatos (класс AsyncTask):

public class ObtenerDatos extends AsyncTask<Void, Void, Void> { 

    private PuertosSaxParser saxparser; 
    private ArrayList<clsPuertos> Puertos; 
    private Context contexto; 
    final TextView textSanferPleamarHora = new TextView(contexto); 

    public ObtenerDatos(Context contexto){ 
     this.contexto = contexto; 
    } 

я стараюсь передать контекст от Main к AsyncTask класс для настройки TextViews там, но я получаю некоторые ошибки.

Это право?

+2

набор текста или обновления пользовательского интерфейса в onPostExecute() или использовать runonuithread un doinbackgroundd() для обновления ui – Raghunandan

+0

Вы также можете использовать обратные вызовы, как я здесь: https://github.com/nedountk/Android-Rest-API. Основной момент в том, что вы не ждете. Вы разрешаете поток пользовательского интерфейса продолжать, чтобы система оставалась отзывчивой и выполняла выполнение, когда сервер возвращает данные. –

ответ

3

Так что мой вопрос, что я могу сделать в главном потоке, чтобы ждать, пока класс AsyncTask закончить «doInBackground» операции

Не делайте этого. полная и целая точка Использование чего-то вроде AsyncTask является не заблокировать основную нить приложения.

Пожалуйста, заполните «textview» информацией, которую я получил »в onPostExecute() из AsyncTask.

+1

Спасибо, я попытался сделать это, как вы говорите, но мне нужно получить «контекст» от MainClass до класса AsyncTask, чтобы настроить TextViews, но у меня есть проблема с ним, у меня есть ошибки, дающие контекст от основного к другой класс. Я поставил новый пример в своем вопросе Это правильно? Еще раз спасибо – Fox

+1

@Fox: «Правильно?» -- возможно нет. Обычно вы не создаете «TextView» из Java-кода таким образом.Лучший способ в настоящее время управлять «AsyncTask» состоит в том, чтобы удерживать его «Сохраненный» фрагмент. Затем 'AsyncTask' может использовать' Fragment' в 'onPostExecute()' (или 'onProgressUpdate()'), чтобы получить необходимые виджеты для обновления результатов. – CommonsWare

1

Независимо от данных и хотите, чтобы установить в TextView вы просто можете сделать это в методе postExecute и может обмениваться данными с doInbackground просто поставить последнюю пустоту в виде строки и просто передать строку

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