android如何登录?

android如何登录?,android,android-lifecycle,Android,Android Lifecycle,我的申请表中有一些信息,这是我的公司信息。 我想在每次应用关闭并运行时登录 这就是我到目前为止所做的。我用用户和密码字段创建了一个自定义对话框。 问题是,每次我旋转屏幕或进入MainActivity时,我都需要重新登录,这很麻烦 我希望每次关闭应用程序并再次运行时,都会出现此对话框,仅此而已。 我尝试了onStop和onDestory,但当我旋转屏幕或更改活动并离开mainactivity时,它会显示此对话框 如何仅在应用程序第一次运行时显示对话框?如果我关闭应用程序并再次运行,它会要求我再次登

我的申请表中有一些信息,这是我的公司信息。 我想在每次应用关闭并运行时登录

这就是我到目前为止所做的。我用用户和密码字段创建了一个自定义对话框。 问题是,每次我旋转屏幕或进入MainActivity时,我都需要重新登录,这很麻烦

我希望每次关闭应用程序并再次运行时,都会出现此对话框,仅此而已。 我尝试了onStop和onDestory,但当我旋转屏幕或更改活动并离开mainactivity时,它会显示此对话框

如何仅在应用程序第一次运行时显示对话框?如果我关闭应用程序并再次运行,它会要求我再次登录


由于方向更改,活动的所有生命周期函数都被调用,因为它是从零开始重建的。您的应用程序必须考虑到这一点。当前活动按暂停()在顶部()在存储(),然后新活动按该顺序在创建()在开始()在恢复()

因此,您必须以应用程序不会忘记的方式存储您已登录的事实。例如,如果您不想使用更复杂的东西,可以使用SharedReferences进行支架周围数据存储。看看这个


您可能可以做的是(但这似乎是一个haxory解决方案,而不是一个好的解决方案)在onSaveInstanceState(Bundle Bundle)函数中保存表示登录到Bundle的布尔值的当前值,然后在onDestroy()中在SharedReferences中将其设置为false。在onCreate(Bundle Bundle)函数中,如果Bundle不为null,则根据Bundle的内容更新SharedReferences的布尔值。如果用户根据布尔值“登录”,则不显示对话框。

您可以使用
savedInstanceState

private static final String BUNDLE_IS_LOGGED_IN = "isLoggedIn";

private boolean isLoggedIn = false; // Set this to true when you log in

@Override
protected void onSaveInstanceState(Bundle outstate) {
    outstate.putBoolean(BUNDLE_IS_LOGGED_IN, isLoggedIn);
}

@Override 
protected void onCreate(Bundle savedInstanceState) {
    if (savedInstanceState != null) {
        isLoggedIn = savedInstanceState.getBoolean(BUNDLE_IS_LOGGED_IN, false);
    }

    if (!isLoggedIn) {
        // Make user log in
    }
}
这意味着在方向更改时,或者如果在系统选择销毁活动后重新创建该活动,您仍将登录。但是,如果用户自行退出应用程序(例如按下后退按钮),则他们将注销


这还意味着您不需要在任何地方存储用户的登录详细信息。

使用共享首选项存储登录信息,然后在onStart()中退出应用程序后清除共享首选项method@SoumilDeshpande如何在退出时清除SharedReferences?应用程序即将关闭时运行的类是什么?这就是问题所在谢谢你的回复,所以我需要在应用程序关闭时删除这些信息。如何在应用程序关闭时删除此信息?它将自动为您删除此信息。只有在重新创建活动(例如,由于方向更改,或由于内存不足而被系统终止)时,
onCreate
中的
savedInstanceState
参数才会非空。如果用户退出活动,则savedInstanceState将自动设置为null。希望有帮助