2016-06-09 17 views
1

Ich habe eine Methode, in der ich Benutzerdaten und einige Daten von firebase Datenbank abrufen.Wie ruft man eine Methode nur auf, wenn die App gestartet wurde? Bitte sehen Sie Details

Das Problem ist, dass die Methode nach dem Start der App zweimal oder dreimal aufgerufen wird und wenn ich von anderen Aktivitäten zurück navigiere.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     checkAuthState(); 
    } 

Ich bin sicher, dass ich genannt habe nicht checkAuthState() in onStart() oder onResume() Methoden:

Ich habe diese Methode in onCreate Methode wie folgt setzen. Diese

ist, wie ich bin zurück aus anderen Tätigkeit Navigation:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: 
       onBackPressed(); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

Bitte lassen Sie mich wissen, warum checkAuthState() wird dreimal genannt zu werden und warum es wird immer wieder aufgerufen, wenn wieder von einer anderen Aktivität navigiert und wie man Rufen Sie diese Methode nur einmal auf, wenn die App gestartet wurde?

Sorry, wenn die Frage scheint falsch formatiert zu sein. Ich bin noch ein Anfänger!

+1

möglich Duplikat http://stackoverflow.com/questions/3588682/is-it-normal-for-the-activity-oncreate- method-to-be-request-multiple-mal die Lösung besteht darin, den onSaveInstanceState zu verwenden, um den Authentifizierungsstatus zu überwachen – liminal

Antwort

1

Erstellen Sie Launcher-Aktivität zu checkAuthStatus. Starten Sie eine neue Aktivität und beenden Sie die Launcher-Aktivität.

+0

scheint eine ausgezeichnete Lösung zu sein. werde es bald versuchen. Bitte erklären Sie auch, wie Sie verhindern können, dass onCreate erneut aufgerufen wird, wenn Sie von anderen Aktivitäten zurück navigieren. –

2

Ihre onCreate() -Methode

@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

das heißt 'checkAuthState();' sechs mal! –

+1

Das sollte Ihren Code definitiv nicht mehr als vorher laufen lassen. War das das Einzige, was du verändert hast? –

+1

hmmm ich habe das gerade überprüft und funktioniert gut für mich .. ich hoffe, du rufst diese Funktion nicht von irgendwo anders auf .. – ManishMenaria

0

ändern Sie können Anwendungs ​​erstreckt und eine eigene Funktion in onCreate wie ein Aktivität hinzufügen. Um Ihre eigene Anwendungsklasse zu erstellen, ändern Sie den Namen der Anwendung im Manifest wie folgt aus:

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

Dann Sie MyApplication wie diese erklären können:

public class MyApplication extends Application { 

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

Natürlich checkAuthState muss in MyApplication sein dann. Eine alternative Lösung, die ich vorschlagen, ist mit Firebase.AuthChangeListener Änderungen der Authentifizierung zu überprüfen:

// Listener to the user's authentication token expiration 
Firebase.AuthStateListener authListener = new Firebase.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(AuthData authData) { 
     checkAuthState(); 
    } 
}; 
mFirebaseReference.addAuthStateListener(authListener);