Paule
- Forum-Beiträge: 106
28.12.2013, 09:04:25 via Website
28.12.2013 09:04:25 via Website
Guten Morgen,
ich habe folgendes Problem.
Ich benötige in meiner App einen Login. Ich habe dazu SharedPreferences verwendet um die Daten zu speichern nach dem der Login erfolgreich war. Jedoch muss der User nach 30 min automatisch wieder abgemeldet werden.
Dazu habe ich mir eine Klasse SessionTimer erstellt. (howLongTimerTick = 30)
Ein Objekt der Klasse erstelle ich in einer Klasse die von android.app.Application erbt, damit diese überall verfügbar ist.
Die startTimer Methode dieses Objektes rufe ich jedoch erst in einem Acticity die für den Login zuständig ist auf, wenn der user erfolgreich eingelogt ist.
Das Problem ist jetzt, dass die onFinish() Methode mal aufgerufen wird und mal nicht, nach dem Ablauf von 30 min. Egal ob ich mich noch in der App befinde oder nicht. Ich kann das Problem nicht dauerhaft nachstellen. Das Gleiche besteht auch wenn ich die normalen Timer-Klasse nehme. Hat das evt. was mit dem garbage collector zu tun? Kann ich Timer für das Vorhaben nicht verwenden?
Ich scheine etwas nicht zu beachten. In normalen Desktop Anwendungen laufen bei mir die Timer immer.
Ich hoffe ich konnte das Problem gut genug beschreiben. Da es nicht konstant auftritt ist es etwas schwierig :-)
Danke und Grüße
ich habe folgendes Problem.
Ich benötige in meiner App einen Login. Ich habe dazu SharedPreferences verwendet um die Daten zu speichern nach dem der Login erfolgreich war. Jedoch muss der User nach 30 min automatisch wieder abgemeldet werden.
Dazu habe ich mir eine Klasse SessionTimer erstellt. (howLongTimerTick = 30)
1public class SessionTimer {
2
3 private CountDownTimer sessionTimer = null;
4
5 public void startTimer(int howLongTimerTick, final Activity parentActivity)
6 {
7 howLongTimerTick = howLongTimerTick * 60000;
8
9 this.sessionTimer = new CountDownTimer(howLongTimerTick, 10000)
10 {
11 @Override
12 public void onTick(long l) {}
13
14 @Override
15 public void onFinish() {
16 SharedPreferences sharedPreferences = parentActivity.getSharedPreferences(PREFS_NAME, 0);
17 SharedPreferences.Editor editor = sharedPreferences.edit();
18 editor.putBoolean("isLogin", false);
19 editor.putString("loginAt", "");
20 editor.putString("loginEMail", "");
21 editor.putString("loginPass", "");
22 editor.commit();
23 }
24 };
25
26 sessionTimer.start();
27 }
28}
2
3 private CountDownTimer sessionTimer = null;
4
5 public void startTimer(int howLongTimerTick, final Activity parentActivity)
6 {
7 howLongTimerTick = howLongTimerTick * 60000;
8
9 this.sessionTimer = new CountDownTimer(howLongTimerTick, 10000)
10 {
11 @Override
12 public void onTick(long l) {}
13
14 @Override
15 public void onFinish() {
16 SharedPreferences sharedPreferences = parentActivity.getSharedPreferences(PREFS_NAME, 0);
17 SharedPreferences.Editor editor = sharedPreferences.edit();
18 editor.putBoolean("isLogin", false);
19 editor.putString("loginAt", "");
20 editor.putString("loginEMail", "");
21 editor.putString("loginPass", "");
22 editor.commit();
23 }
24 };
25
26 sessionTimer.start();
27 }
28}
Ein Objekt der Klasse erstelle ich in einer Klasse die von android.app.Application erbt, damit diese überall verfügbar ist.
Die startTimer Methode dieses Objektes rufe ich jedoch erst in einem Acticity die für den Login zuständig ist auf, wenn der user erfolgreich eingelogt ist.
Das Problem ist jetzt, dass die onFinish() Methode mal aufgerufen wird und mal nicht, nach dem Ablauf von 30 min. Egal ob ich mich noch in der App befinde oder nicht. Ich kann das Problem nicht dauerhaft nachstellen. Das Gleiche besteht auch wenn ich die normalen Timer-Klasse nehme. Hat das evt. was mit dem garbage collector zu tun? Kann ich Timer für das Vorhaben nicht verwenden?
Ich scheine etwas nicht zu beachten. In normalen Desktop Anwendungen laufen bei mir die Timer immer.
Ich hoffe ich konnte das Problem gut genug beschreiben. Da es nicht konstant auftritt ist es etwas schwierig :-)
Danke und Grüße
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.