2016-10-26 2 views
2

Okay, der Titel ist ein bisschen komisch. Meine App startet unter SplashScreenActivity, die 3 Sekunden lang angezeigt wird und die SignInActivity startet, damit der Benutzer sich anmelden kann. Durch Klicken auf eine nextButton auf der SignInActivity startet die MainActivity.Absicht zu MainActivity startet die aktuelle Aktivität wieder

Das Problem ist, dass nach dem Start, als ich die nextButton klicken Sie die SignInActivity relauncht und auf das nextButton ein zweites Mal bringt mich zum MainActivity, die völlig fremd ist. Wenn ich die SignInActivity mit einer anderen Methode starte und auf die nextButton klicke, komme ich ohne Probleme direkt zur MainActivity. Ich habe meinen Code oben und unten durchgesehen und habe keine Ahnung, was dieses Problem verursachen könnte.

Hier ist der entsprechende Code

nextButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (isLoggedIn) { 
       sharedPreferences.edit().putBoolean("isLoggedIn", true).apply(); 
       Log.d("TAG", "Logged in Shared Preferences Set"); 
       startActivity(new Intent(SignInActivity.this, MainActivity.class)); 
       finish(); 
      } else { 
       sharedPreferences.edit().putBoolean("isLoggedIn", false).apply(); 
       Log.d("TAG", "Not Logged in Shared Preferences Set"); 
       startActivity(new Intent(SignInActivity.this, MainActivity.class)); 
       Toast.makeText(SignInActivity.this, "Sign In was Skipped", Toast.LENGTH_SHORT).show(); 
       finish(); 
      } 
     } 
    }); 

Interessanter ich aus der startActivity() Methode kommentiert, um zu sehen, ob es die Aktivität neu aufgelegt, aber es kam nicht. Was ist hier falsch?

Update: Lifecycle-Protokoll -> Keine Ahnung, warum SignInActivity im ersten Fall nicht zerstört wird und wodurch die Aktivität neu erstellt wird.

(nicht entweder über Facebook oder Google + angemeldet)

10-27 00:46:20.549 22392-22392/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created 
10-27 00:46:21.464 22392-22392/com.dhyanfoundation.vedicchants D/Log: handleSignInResult:false 
10-27 00:46:29.593 22392-22392/com.dhyanfoundation.vedicchants D/Log: Not Logged in Shared Preferences Set 
10-27 00:46:29.692 22392-22392/com.dhyanfoundation.vedicchants D/Log: MainActivity Created 
10-27 00:46:30.049 22392-22392/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created 
10-27 00:46:30.211 22392-22392/com.dhyanfoundation.vedicchants D/Log: handleSignInResult:false 
10-27 00:46:30.473 22392-22392/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed 
10-27 00:46:48.274 22392-22392/com.dhyanfoundation.vedicchants D/Log: Not Logged in Shared Preferences Set 
10-27 00:46:48.674 22392-22392/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed 

(Angemeldete via Login facebook gecached)

10-27 00:51:17.411 28298-28298/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created 
10-27 00:51:20.378 28298-28298/com.dhyanfoundation.vedicchants D/Log: Logged in Shared Preferences Set 
10-27 00:51:20.438 28298-28298/com.dhyanfoundation.vedicchants D/Log: MainActivity Created 
10-27 00:51:20.701 28298-28298/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created 
10-27 00:51:21.100 28298-28298/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed 
10-27 00:51:26.960 28298-28298/com.dhyanfoundation.vedicchants D/Log: Logged in Shared Preferences Set 
10-27 00:51:27.326 28298-28298/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed 

(Angemeldete über Google+ gecached Login)

10-27 00:53:29.039 30454-30454/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created 
10-27 00:53:33.133 30454-30454/com.dhyanfoundation.vedicchants D/Log: handleSignInResult:true 
10-27 00:53:44.096 30454-30454/com.dhyanfoundation.vedicchants D/Log: Logged in Shared Preferences Set 
10-27 00:53:44.204 30454-30454/com.dhyanfoundation.vedicchants D/Log: MainActivity Created 
10-27 00:53:44.565 30454-30454/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created 
10-27 00:53:44.954 30454-30454/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed 
10-27 00:53:45.358 30454-30454/com.dhyanfoundation.vedicchants D/Log: handleSignInResult:true 
10-27 00:53:52.674 30454-30454/com.dhyanfoundation.vedicchants D/Log: Logged in Shared Preferences Set 
10-27 00:53:53.120 30454-30454/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed 

Ich habe eine neue leere Aktivität erstellt und die MainActivity durch BlankActivity mit ersetzt n der nextButton Klick-Methode und alles war in Ordnung. Hier ist das Lifecycle-Protokoll:

10-27 00:56:19.538 1502-1502/com.dhyanfoundation.vedicchants D/Log: SignInActivity Created 
10-27 00:56:22.116 1502-1502/com.dhyanfoundation.vedicchants D/Log: handleSignInResult:false 
10-27 00:56:24.747 1502-1502/com.dhyanfoundation.vedicchants D/Log: Not Logged in Shared Preferences Set 
10-27 00:56:24.849 1502-1502/com.dhyanfoundation.vedicchants D/Log: BlankActivity Created 
10-27 00:56:25.244 1502-1502/com.dhyanfoundation.vedicchants D/Log: SignInActivity Destroyed 
+0

Können Sie den Code für SplashScreen posten? –

+0

wo haben Sie isLoggedIn initialisiert? – USKMobility

+0

Fügen Sie den Lebenszyklusmethoden in jeder 'Aktivität' eine Protokollierung hinzu. Das könnte Ihnen ein besseres Verständnis dafür geben, was vor sich geht. Ich sehe nicht, wie "SignInActivity" die "SignInActivity" basierend auf dem von Ihnen geposteten Code starten kann. –

Antwort

0

Zunächst einmal denke ich, dass Sie Ihr Design neu betrachten sollten. Wenn der Benutzer versucht, sich über die App anzumelden, sollte die Logik zur Überprüfung seines Anmeldestatus in der Intent-Umleitung von SplashScreenActivity selbst erfolgen.

Angenommen Sie das Protokoll in Status richtig verfolgt haben, sollten Sie Aktivität Fluss wie folgt sein:

1) SplashScreenActivity ->MainActivity (wenn Benutzer angemeldet ist)

2) SplashScreenActivity ->SignInActivity ->MainActivity (wenn der Benutzer nicht angemeldet ist)

Wenn der Benutzeranmeldezustand falsch ist, sollte er an SignInActivity weitergeleitet werden und dort im onclick-Ereignis von nextButton sollten seine Anmeldeinformationen überprüft werden und der Anmeldestatus sollte aktualisiert werden, und dann sollte er an MainActivity umgeleitet werden.

Innerhalb Ihrer MainActivity sollten Sie dem Benutzer ermöglichen, sich abzumelden, und dort sollte der Anmeldestatus auf false aktualisiert werden.

Ich weiß, dass dies Ihre Frage nicht direkt beantwortet, aber viele Male können solche Fehler beseitigt werden, indem man das Design überdenkt und es in diesem Level selbst robust macht.

Verwandte Themen