Активность не будет загружать контент достаточно быстро

1

Я пытаюсь создать заставку для моего приложения для Android, где страница входа в систему только запускает активность Splash, а затем все файлы обработки входа в нее выполняются. Затем он возвращает логическое значение, было ли логин выполненным или нет. Но обработка входа завершается до загрузки содержимого макета XML. Как это можно зафиксировать?

Это моя активность заставки:

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    Bundle extras = getIntent().getExtras();
    if(extras !=null)
    {
        url = extras.getString("url");
    }

    setContentView(R.layout.splashscreen);
    url += "login/?userName=" + Login.loginName + "&password=" + Login.password;

    DomLoginParser parser = new DomLoginParser(url);
    if(parser.parse())
    {
        Login.loginSuccessful = true;
    }
    else
    {
        Login.loginSuccessful = false;
    }

    finish();
}
Теги:
android-activity

3 ответа

3
Лучший ответ

Переместите логин из вызова onCreate, используя AsyncTask для входа в систему. То, что вы делаете, завершает работу, прежде чем дать ей возможность показать содержимое. Активность показывает contentView только после завершения вызова onCreate...

0

Попробуйте что-то вроде этого:

private class LoginChecker extends AsyncTask<Void, Void, Void> { 

         protected Void doInBackground(Void... args) { 
              DomLoginParser parser = new DomLoginParser(url);    
              if(parser.parse())    {   
                  Login.loginSuccessful = true;    
              }    else    {        
                  Login.loginSuccessful = false;    
              }    
             return null;     
         }     

         protected void onPostExecute(Long result) {         
           // finish the activity    
         } 

    }

Чтобы вызвать это, обновите метод onCreate до следующего:

@Override        
public void onCreate(Bundle savedInstanceState) {                   
      super.onCreate(savedInstanceState);                    
      Bundle extras = getIntent().getExtras();            
      if(extras !=null) {                
         url = extras.getString("url");            
      }                    
      setContentView(R.layout.splashscreen);            
      url += "login/?userName=" + Login.loginName + "&password=" + Login.password;                    
      new LoginChecker.execute();
}       
0

Не знаю, что делает DomLoginParser, и полагая, что класс Login статичен, но почему вы называете метод finish() внутри onCreate()?

В этой проблеме вы немедленно уничтожаете деятельность!

Удалите вызов finish().

Если

DomLoginParser parser = new DomLoginParser(url);
if(parser.parse())
{
    Login.loginSuccessful = true;
}
else
{
    Login.loginSuccessful = false;
}

это все, что вы делаете для входа в систему, и хотите, чтобы заставка была видимой в течение некоторого времени, вызовите Thread.sleep() (но имейте в виду, что она может создавать приложение, не отвечающее, если сон слишком много времени), или просто создать отдельный процесс (Asynctask или threadhandler, связанный с другим потоком, который говорит вашему экрану заставки).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню