1

ログインページがスプラッシュアクティビティを開始するだけで、すべてのログイン処理がそこで行われる、Androidアプリのスプラッシュスクリーンを作成しようとしています。次に、ログインが成功したかどうかにかかわらず、ブール値を返します。ただし、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();
}
4

3 に答える 3

3

AsyncTaskを使用してログインを実行することにより、ログインをonCreate呼び出しから移動します。あなたがしていることは、内容を示す機会を与える前に活動を終えることです。アクティビティは、onCreate呼び出しが終了した後にのみcontentViewを表示しています...

于 2012-05-24T14:19:08.713 に答える
0

DomLoginParserが何をするのかわからず、Loginクラスが静的であると考えていますが、なぜonCreate()内でfinish()メソッドを呼び出すのですか?

それが問題です、あなたはすぐに活動を殺します!

finish()呼び出しを削除します。

もしも

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

ログインについて行うのはこれだけで、スプラッシュ画面をしばらく表示したい場合は、Thread.sleep()を呼び出すか(ただし、長時間スリープするとアプリケーションが応答しない場合があることに注意してください)、または単に作成します。別のプロセス(スプラッシュ画面に終了するように指示する別のスレッドに関連付けられた非同期タスクまたはスレッドハンドラー)。

于 2012-05-24T14:26:44.973 に答える
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();
}       
于 2012-05-24T14:44:26.180 に答える