我有一个方法,从数据库中获取用户的详细信息和一些数据firebase
其中。
问题是该方法在启动应用程序后被调用两次或三次,当我从任何其他活动导航回来时再次调用。
我把该方法放在onCreate
方法中,如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
checkAuthState();
}
我确定我没有用onStart()
或onResume()
方法调用checkAuthState()
。
这是我从其他活动导航回来的方式:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
请让我知道为什么checkAuthState()
被调用三次,为什么在从任何其他活动导航回来时再次调用它,以及如何在应用程序启动后仅调用此方法一次?
抱歉,如果问题的格式似乎不正确。我还是初学者!
将 onCreate() 方法更改为
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if(savedInstanceState == null){
checkAuthState();
}
}
创建启动器活动以检查身份验证状态。启动新活动并终止启动器活动。
您可以像 Activity 一样扩展应用程序并在onCreate
中添加自己的函数。若要创建自己的应用程序类,请在清单中更改应用程序的名称,如下所示:
<application
android:name=".MyApplication"
...
</application>
然后,您可以像这样声明 MyApplication:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
checkAuthState();
}
}
当然,checkAuthState
必须在我的应用程序中。我建议的另一种解决方案是使用 Firebase.AuthChangeListener
验证身份验证的更改:
// Listener to the user's authentication token expiration
Firebase.AuthStateListener authListener = new Firebase.AuthStateListener() {
@Override
public void onAuthStateChanged(AuthData authData) {
checkAuthState();
}
};
mFirebaseReference.addAuthStateListener(authListener);