12

ユーザーがログアウトをクリックしたときにアプリからログアウトしようとしました。ユーザーがログアウトした場合、アプリを閉じずにログインした後、正常に動作しています。その後、正常に動作しています。再度表示する場合、戻るボタンは無効になりますログイン後のログインページしかし、ログイン後のユーザーがアプリケーションを閉じてからログアウトすると、ログインページが表示されず、空白のページが表示されます

コード

public class AppState {
    private static AppState singleInstance;

    private boolean isLoggingOut;

    private AppState() {
    }

    public static AppState getSingleInstance() {
        if (singleInstance == null) {
            singleInstance = new AppState();
        }
        return singleInstance;
    }

    public boolean isLoggingOut() {
        return isLoggingOut;
    }

    public void setLoggingOut(boolean isLoggingOut) {
        this.isLoggingOut = isLoggingOut;
    }
}

ログアウトのOnClick

logout.setOnClickListener(new OnClickListener() {
    @Override
            public void onClick(View arg0) {
                SharedPreferences myPrefs = getSharedPreferences("MY",
                        MODE_PRIVATE);
                SharedPreferences.Editor editor = myPrefs.edit();
                editor.clear();
                editor.commit();
                AppState.getSingleInstance().setLoggingOut(true);
                Log.d(TAG, "Now log out and start the activity login");
                Intent intent = new Intent(HomePage.this,
                        LoginPage.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);

            }
        });

LoginActivity で

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == MAIN_ACTIVITY_REQUEST_CODE) {

            if (!AppState.getSingleInstance().isLoggingOut()) {
                finish();
            } else {
                AppState.getSingleInstance().setLoggingOut(false);
                super.onActivityResult(requestCode, resultCode, data);
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

    }

これで私が間違ったことを教えてください

Vivek Bhusalの提案の後、sharedpref を使用しようとしました

ホームページのログアウト

logout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                SharedPreferences myPrefs = getSharedPreferences("Activity",
                        MODE_PRIVATE);
                SharedPreferences.Editor editor = myPrefs.edit();
                editor.clear();
                editor.commit();
                //AppState.getSingleInstance().setLoggingOut(true);
                setLoginState(true);
                Log.d(TAG, "Now log out and start the activity login");
                Intent intent = new Intent(HomePage.this,
                        LoginPage.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);

            }
        });

private void setLoginState(boolean status) {
        SharedPreferences sp = getSharedPreferences("LoginState",
                MODE_PRIVATE);
            SharedPreferences.Editor ed = sp.edit();
            ed.putBoolean("setLoggingOut", status);
            ed.commit();
    }

ログインページ

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        SharedPreferences sp = getSharedPreferences("LoginState",
                MODE_PRIVATE);
        boolean stateValue  = sp.getBoolean("setLoggingOut", false);
        if (requestCode == MAIN_ACTIVITY_REQUEST_CODE) {

            if (!stateValue) {
                finish();
            } else {
                //AppState.getSingleInstance().setLoggingOut(false);
                updateLoginState(false);
                super.onActivityResult(requestCode, resultCode, data);
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

アプリを再起動してからログアウトすると、空白の画面が表示される同じ問題が引き続き発生します。

4

8 に答える 8

26

ログアウト ボタンはログイン アクティビティを開始しますが、ホームページ アクティビティを終了しません。ホームページを閉じるには:

Intent intent = new Intent(HomePage.this, LoginPage.class);
startActivity(intent);
finish()  // This call is missing.

これを開くには、ログイン ページから次の手順を実行します。

Intent intent = new Intent(LoginPage.this, HomePage.class);
startActivity(intent);
finish()

別のアクティビティを開始したら、1 つのアクティビティを終了します。このように、タスク スタックにはアクティビティが 1 つだけあります。つまり、過去の履歴はありません。Vivek Bhusal によって投稿されたサンプル アプリを確認してください。

このSO question受け入れられた answer、およびthis answerを読んで、ログアウトを実行する方法といくつかの警告を実行する方法についてのアイデアをお勧めIntent.FLAG_ACTIVITY_CLEAR_TOPします。これは、あなたの場合、実際には必要ありません。

于 2013-10-11T04:03:02.507 に答える
0
  if (!AppState.getSingleInstance().isLoggingOut()) {

この意見は正しいと思いますか?? この条件が true のときにアクティビティを終了するのを見たので、これはログアウトを意味すると思いますが、isLoggingOut は true である必要がありますが、false かどうかを確認して終了を呼び出します。私は正しいですか??

于 2013-09-30T16:26:54.123 に答える
0

SharedPreferencesこのクラスは Android で使用できます。値を保存して再度ロードするために使用できます。これはドキュメントチュートリアルです。

于 2013-10-07T05:07:52.780 に答える