2016-06-09 49 views
1

我在其中我获取用户的详细信息和一些数据从数据库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()获取调用三次,为什么它从任何其他活动和航行回来时,怎么是越来越再次调用只有在应用程序启动后才调用此方法一次?

很抱歉,如果问题似乎格式错误。我还是个初学者!

+1

的可能重复http://stackoverflow.com/questions/3588682/is-it-normal-for-the-activity-oncreate-方法对被称为 - 多倍的解决方案是使用的onSaveInstanceState将保持AUTH状态 – liminal

回答

1

创建启动活动checkAuthStatus。 开始新的活动并杀死启动器活动。

+0

的轨道似乎是一个很好的解决方案。将尽快尝试。还请告诉如何停止onCreate从其他活动导航回来时再次被调用? –

2

您的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(); 
    } 

} 
+0

这叫'checkAuthState();'六次! –

+1

这绝对不应该让你的代码比以前运行得更多。这是你改变的唯一的东西吗? –

+1

嗯,我只是检查了这一点,并为我工作得很好..我希望你不是从其他地方调用这个函数.. – ManishMenaria

0

您可以扩展应用程序,并添加自己的功能onCreate就像一个活动。然后

<application 
    android:name=".MyApplication" 
    ... 
</application> 

,你可以声明为MyApplication这样的:要创建自己的应用程序类,在表现这样的改变应用程序的名称

public class MyApplication extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     checkAuthState(); 
    } 
} 

当然,checkAuthState必须在所有MyApplication然后。另一种解决方案,其建议是验证认证的变化与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); 
相关问题