Login Status in der richtigen Methdoe auf false setzen

  • Antworten:19
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 282

08.09.2014, 20:44:13 via Website

Hallo liebe Community :)

Ich habe eine App in der man sich einloggen muss, um bestimmte Funktionen verwenden zu können. Wenn diese App jedoch geschlossen wird, möchte ich, das der Login-Status wieder auf false ist, sprich der User beim nächsten Start der App nicht mehr eingeloggt ist.
Ich habe es am Anfang in der onCreate-Methoder meiner MainActivity auf false gesetzt, dass Problem enstand dabei, dass dann nach dem korrekten einloggen über die LoginActivity und Weiterleitung wieder zur MainA. der Login-Status wieder mit false überschrieben wurde.
Dann habe ich in der Methode onDestroy den Login-Status auf false gesetzt -> Problem dabei: Wenn die App vom System beendet wird, wird onDestroy nicht aufgerufen.
Nun habe ich es in der Methode onStop implementiert -> Problem hier: Wenn ich eine Whatsapp-Nachricht bekomme bzw. meine App in den Hintergrund kommt, wird der Login-Status auf false gesetzt.

Leider weiß ich nun keine Alternative mehr und hoffe dass mir jemand weiterhelfen kann :)

LG Jakob

Antworten
  • Forum-Beiträge: 11.135

08.09.2014, 20:52:04 via Website

Ich würde anders an die Sache herangehen.
Du hast ja deine LoginActivity.
sobald der Login erfolgreich war, kannst du in den SharedPreferences ein Timestamp mit der aktuellen Zeit als Flag setzen.
Sobald die App dann in den Hintergrund geht und wieder gestartet wird, musst du nur überprüfen, wann der letzte Login war.
Ist dieser schon zu lange zurüch z.b. 3 Stunden dann Neu Einloggen, sonst immernoch eingeloggt.
Dafür musst du dir halt ein Gültigkeitszeitraum für deinen login festlegen.

  1. Möglichkeit.

Du benutzt die SavedInstances, da kannst du ein Flag übergeben und dann wieder auslesen.
(Ist ne Idee ob sich das umsetzen lässt, ist eine andere Frage)
Hier docu dazu: http://developer.android.com/training/basics/activity-lifecycle/recreating.html

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 336

08.09.2014, 20:54:47 via App

Versuch einfach mal die Variable statisch zu machen mit static boolean, sodass die variable selbst nicht immer neu erstellt wird

— geändert am 08.09.2014, 20:55:19

Android Developer

Antworten
  • Forum-Beiträge: 282

08.09.2014, 20:57:18 via Website

@Pascal: Die Idee mit dem Timestamp ist unabhängig von den SavedInstaces oder?

LG Jakob

Antworten
  • Forum-Beiträge: 11.135

08.09.2014, 21:05:09 via Website

Genau, aber das einfachste aber nicht das Beste ist das mit der static Variable wie im voherigen Post genannt.
Natürlich könntest du acuh beides kombinieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 11.135

08.09.2014, 21:10:13 via Website

Na ja kommt immer aufs Vorhaben an.
Spontan würde ich sagen.
Erstmal static Variable und wenn man dann mal Zeit und Lust hat das Umprogrammieren.
Dann würde ich static Varaible und Timestamp nutzen, da ich keine Lust hätte mich in die SavedInstances reinzulesen.
Da siegt bei mir manchmal die Faulheit....
Zudem kannst du das selber Entscheiden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 282

08.09.2014, 21:12:37 via Website

Ich weiß nur nicht wie ich das mit der static Variable machen sollte, da ich den Login status immer dann abfrage wenn ich ihn benötige.

Ich hätte eher an die SavedInstances gedacht, scheint laut dem CodeBsp nicht so schwer zu sein.

Jaja die Faulheit, ist oft ein Hund ;)

LG Jakob

Antworten
  • Forum-Beiträge: 282

08.09.2014, 21:13:39 via Website

Was ich vergessen habe!! Sorry. Speicher den Login-Status in den SharedPreferences ab.

LG Jakob

Antworten
  • Forum-Beiträge: 11.135

08.09.2014, 21:15:34 via Website

Na dann kannst du das ja mal machen.
Irgendwann kommt man an neuen Sachen eh nicht vorbei.
Dann halt einmal machen aber dann Richtig.
Das mit den Savedinstances kannst du ja dafür benutzen, scheint geeignet zu sein.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 282

08.09.2014, 21:18:41 via Website

Gut danke :) Werde es in den nächsten Tagen einmal reinpfuschen ;) (nein wills eh gscheit machen :D )

LG Jakob

Antworten
  • Forum-Beiträge: 282

08.09.2014, 21:35:46 via Website

Machs doch lieber jetzt ;)

Was mir jetzt nur nicht klar ist ...

Wenn ich in der onCreate überprüfe ob der savedInstanceState nicht null ist und mir den boolean wert hole, soll ich dann in den SharedPreferences den Login-Status mit diesen Wert setzen?

Und setze ich den Login-Status trd in der onStop auf false?

LG Jakob

Antworten
  • Forum-Beiträge: 11.135

08.09.2014, 21:40:33 via Website

Ne dann musst du in den SharedPreferences nix setzen (ausser du willst es)
ich würde das Flag einfach in einer Variable Speichern und diese auswerten
Das mit der onStop musst du testen, dass weiss ich gerade nicht.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 282

08.09.2014, 21:42:32 via Website

Irgendwie war ich zu vor eilig, hatte vorher doch alles einfacher geklungen :P Naja mal schauen ob ich es hinbekomme.

LG Jakob

Antworten
  • Forum-Beiträge: 282

16.09.2014, 14:33:19 via Website

Leider war der savedInstanceState auch nicht die Lösung des Problems. Gibt es kein Event, dass aufgerufen wird, wenn die App vom System gekillt wurde?

LG Jakob

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.867

16.09.2014, 16:52:16 via App

Jakob N.

Wie würde so ein Service aufgebaut sein?

Schema wäre service starten in der onCreate und wenn die onDestroy aufgerufen wird service schließen. sonst in der onresume abfragen ob der service läuft wenn nicht einloggen.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

Lebensmittelwarnung-App

Download Samsung Firmware Tool

Meine Wunschliste

Telegram News Feed

Antworten
  • Forum-Beiträge: 282

16.09.2014, 20:41:23 via Website

Oke danke!
Habe es jetzt jedoch anders gelöst :) Einfach mit einem zweiten String :P

LG Jakob

Antworten