2011-11-23 20 views
11

私は開発中です。私はタイトルバーをカスタマイズし、そこにログアウトボタンを置いて、ユーザーがいつでもログアウトし、別のアカウントでログインできるようにしました。アプリはログインアクティビティを再度表示する必要があります。すべてのアクティビティでログインを確認してください

これはうまくいきますが、私の問題は戻るボタンです。ユーザーがログアウトするとログインアクティビティが表示されますが、ユーザーが戻ると前のページに戻り、ユーザーはログインせずにそのアクティビティを再度使用できます。

私が持っている私の、このように設定すべての活動のonCreate()

public void onCreate(Bundle savedInstanceState) { 
    // Activity code 
    checkLogin(); 
} 

をそしてcheckLogin()

if (GlobalContext.getCurrentUser() == null) { 
    Intent i = new Intent(this, LoginActivity.class); 
    startActivityForResult(i, GlobalContext.REQUEST_LOGIN); 
} 

私は戻って押すと、しかし、それは時々私のアプリがクラッシュし、それが必要のように働いていません時には私が言ったように以前の活動に戻り、時には実際に働くこともあります。

アクティビティが(再)開始されるたびに、checkLogin()が呼び出されるようにするにはどうすればよいですか?
または、私が欲しいものをやるための別の方法がありますか?

はEDIT:@ガブリエルの答えとthe SDK referencesから次の図に基づいて

は、私は、onCreateの代わりにonResume()方法にcheckLogin()を移動し、私の問題を解決します。ユーザーがログイン・ファースト活動に

Activity life cycle

答えて

5

checkLogin()からonCreate()からonStart()までである。私が提案する何

+0

ありがとう、それは私が必要としていたものです。私は実際にそれをonResumeに移し、うまくいった –

4

、このようなあなたのSharedPreferences上の変数を保存しよう:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean("logged", true); // set it to false when the user is logged out 

     // Commit the edits! 
     editor.commit(); 

そして、あなたのすべての活動で、チェックするためにこのコードを置きますユーザーがログインしている場合、ログインしていない場合は、LoginActivityに次のようにリダイレクトします。

@Override 
    protected void onStart(Bundle state){ 
     super.onStart(state); 
     . . . 

     // Restore preferences 
     SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     boolean loggedIn = settings.getBoolean("logged", true); 
     if(!loggedIn){ 
      Toast.makeText(this,"you are not logged in !!",3000).show(); 
      Intent i = new Intent(this,LoginActivity.class); 
      startActivity(i); 
     } 
    } 
+0

SharedPreferencesで行っているこのチェックは、getCurrentUser()で行っているチェックの結果と同じです。したがって、ログイン状態を保存するのはちょっと無意味です(私は説明します)。閉じた後にアプリケーションがログインを保存しないので間違っているので、この設定をfalseに設定するためにアプリケーションがいつ終了するかを確認する必要があります。しかし、onCreateからonStartへのチェックを私の問題 –

+0

を解決し、より多くのパフォーマンスのために、メソッドonResume()にboolean loggedInのテストを追加する必要があります。 – Houcine

5

はアクティビティ作成時のログインにのみ1時間を確認呼び出すようになりますonCreate()方法でそれを確認するようacitivity onResume()にあなたcheckLogin()を追加することです。

あるいはバッターは毎度のは、あなたの活動は、フロントに来る

onAttachToWindow() 

に移動することです。 onAttachToWindow()が呼び出され、ログインを確認します。

関連する問題