登出功能在安卓中的实现方式

3

我正在制作一种社交网络应用程序。 我正在其中实现注销功能。 在单击注销按钮时,它应该导航到登录屏幕,但现在却导航到主页屏幕。 我正在使用以下代码进行注销。

  IntentFilter intentFilter = new IntentFilter();
  intentFilter.addAction("com.package.ACTION_LOGOUT");
  registerReceiver(new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {

         System.out.println("onReceive Log out in progress");
          Intent intent1 = new Intent(getApplicationContext(),          Login.class);
                    startActivity(intent1);
                                finish();
                }
            }, intentFilter);
6个回答

6

使用以下方法进行注销。

yourintent.setflag(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);

它可能会对你有所帮助


我也尝试过这个方法,但它仍然导航到主页屏幕。 - ekjyot
嗨,ekjyot,当你从主页活动继续前进时,请完成你的主页。 - amity
嗨,ekjyot,我已经更新了我的答案,请尝试一下,我相信它会起作用。 - amity

4

只需将意图(Intent)传递给您的登录活动并在意图中设置标志

inten1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

这将清除所有活动并导航到您的登录页面。


我已经做过了。它又跳转到主页而不是登录界面。 - ekjyot
当您在导航到下一个活动时完成所有活动时,您需要检查您的代码,看看在启动活动时是否有任何finish()行。 - mayank_droid
传递 intnet = new Intent(getApplicationContext(), LoginActivity.class),就是这样。 - mayank_droid
现在真的很奇怪,你是在调用那个意图标志吗?我真的得看看代码...哈哈!!! - mayank_droid

2

对我而言有效的方法是在内部跟踪您的登录状态,使用某种全局变量:

public boolean loggedin = false;

如果您已经注销,请在所有活动中覆盖onResume()和finish():

@Override
public void onResume() {
  super.onResume();
  if (!loggedin)
    finish();
}

2
这是一个堆栈问题,您需要解决它。我发现的最佳解决方案是,在您的应用程序运行时保持单个活动在堆栈中,注销时只有登录屏幕在堆栈中,如果用户按返回按钮,他将看到主屏幕。

1

试试这个:

Intent intent = new Intent(getApplicationContext(), Login.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
Toast.makeText(this, "Signed out", Toast.LENGTH_SHORT).show();
startActivity(intent);
finish();

0

首先对您的代码进行以下更改

Intent intent = new Intent(getApplicationContext(),Login.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

然后在你的广播接收器中删除finish();。祝你好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接