Отображение активности в ожидании результатов, возвращающихся при использовании AsyncTask - PullRequest
0 голосов
/ 20 декабря 2011

Я хочу, чтобы активность отображалась при загрузке некоторой информации из Интернета.Когда информация будет загружена, я хочу показать другое действие.

Это мой код:

public class SplashScreenActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash_screen_layout);

    load();
}

private void load() {
    try {
        ArrayList data= new LoadPage().execute().get();
        if(data!= null) {
            startActivity(new Intent(getApplicationContext(), MainActivity.class));
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

Довольно просто, но проблема у меня 'Я имею в виду, что эта активность не отображается на экране (пользовательский интерфейс).Что происходит, так это то, что информация загружается и MainActivity запускается, как и ожидалось, но это действие (SplashScreenActivity) никогда не показывается пользователю.

При входе в MainActivity, если я нажимаю кнопку «Назад», я вижуSplashScreenActivity.

Я подозреваю, что это как-то связано с потоком пользовательского интерфейса и тем фактом, что я вызываю метод get в new LoadPage().execute().get(); и жду результатов, которые придут.

Какя могу это исправить?Спасибо.

Ответы [ 3 ]

0 голосов
/ 20 декабря 2011

Попробуйте использовать метод onPostExecute в вашем SplashScreenActivity.

Как только AsyncTask в фоновом режиме преодолеет управление, переходит к методу onPostExecute, в котором вы можете написатькод для вызова следующего действия в зависимости от вашего результата.

Примерно так:

   protected void onPostExecute(ArrayList data)
      {
        if(data!= null) 
        {
         Intent showContent = new Intent(getApplicationContext(),MainActivity.class);
         startActivity(showContent);

        }
      }
0 голосов
/ 20 декабря 2011

Мы реализовали это по-другому, и это сработало хорошо. Заставка - это представление, а не действие, которое находится на первой позиции виджета. Когда загрузка будет завершена, заставка отключается с анимацией.

0 голосов
/ 20 декабря 2011

Вы неправильно используете ASyncTask. Вызов метода get в ASyncTask заблокирует ваш поток пользовательского интерфейса. ASyncTask содержит метод onPostExecute, который является подходящим местом для запуска действия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...