如何仅在应用程序启动时调用方法?详情请看



我有一个方法,从数据库中获取用户的详细信息和一些数据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);

相关内容

  • 没有找到相关文章

最新更新