Einstellungen (Teil 4)/Anmelden (Teil 2): Direct Login: Benutzername - Eine Android App für die Steem Blockchain - Teil #33
Wie im letzten Teil angekündigt, möchte ich mit der Funktionalität hinter dem Anmeldeprozess beginnen. Den Anfang macht hierbei Direct Login. Als erstes möchte ich die Benutzernamenverwaltung vollständig Es sind im groben folgende Dinge zu machen:
- Überprüfen des Benutzernamens
- Speichern des Benutzernamens
- Abrufen des Benutzernamens bei App Start
1. Überprüfen des Benutzernamens und Speicherung
1.1 Überprüfung
Zuerst möchte ich bei einer Änderung des Nutzernamens überprüfen, ob der eingegebene Wert ein richtiger Benutzername ist, d,h, ob dieser existiert. Um aus Änderungen an den Preferences reagieren zu lönnen, muss ein OnSharedPreferenceChangeListener registriert werden. In diesem überprüfe ich dann, um welche Preference es sich handelt, damit ich je nach geändertem Wert die entsprechenden Schritte einleiten kann. Um zu überprüfen, ob ein Benutzername als Steem Account existiert, starte ich eine JSON-API Abfrage nach dem eingegebenen Benutzernamen. Kommt am Ende eine leere ArrayList zurück (erzeugt über die gleiche Methode wie auch schon bei den Accounts), gibt es keinen Account mit dem eingegebenen Benutzernamen. Die gleiche Überprüfungsmethode verwende ich später auch noch beim Laden während des App Starts.
1.2 Speicherung
Normalerweise werden die Preferences direkt beim Ändern gespeichert. Da dies allerdings zur Folge hat, dass bei einer Falscheingabe der Benutzer zwar informiert werden würde, der falsche Nutzername aber dennoch gepeichert bliebe. Deshalb schreibe ich den neuen Benutzernamen, wenn dieser richtig ist, auch noch in eine andere Variable, um bei einer Falscheingabe den alten Wert wiederherstellen zu können. Der gesamte OnSharedPreferenceChangeListener sieht mit der Überprüfung und der Speicherung so aus:
2. Laden bei App Start
Um den angezeigten Feed entsprechend des angemeldeten Benutzers anzuzeigen, muss dieser beim App Start in eine Variable geladen werden. Die dazu verwendete Klasse habe ich bereits erstellt, damals habe ich gesagt, dass die Werte später ausgelesen werden. Das ist jetzt der Fall. Da für das Auslesen aus den SharedPreferences aber der AppContext notwendig ist und die Speicherklasse keine Activity ist, muss der Konstruktor mit dem AppContext als Parameter aus einer Activity, in meinem Fall der MainActivity, heraus Aufgerufen werden. Der Aufruf sieht so aus:
In der Klasse "LoadedAppData" muss noch der Konstruktor bestückt werden. Dieser lädt zunächst den Wert für den Benutzernamen aus den Preferences und speichert diesen ab. Damit es keine Fehlermeldungen gibt, wenn noch kein Benutzername spezifiziert ist, wird bei einem leeren String automatisch der Benutzer @null ausgewählt. Dieser Account ist einfach ein Dummy Account, der keine Wallet besitzt, weshalb alle Wert als 0 angezeigt werden. Dadurch wird zwar kein Feed angezeigt, aber die App stürzt nicht aufgrund eines nicht existierenden Nutzernamens ab. Der Benutzername wird ebenfalls auf @null gesetzt, wenn der gespeicherte Benutzername nicht existiert. Dies wird mit dem gleichen Verfahren überprüft, mit dem ich auch schon beim Speichern die Existenz des Benutzernamens überprüft habe. Die
gesamte "LoadedAppData" Klasse sieht jetzt so aus:
Damit ist nun der Benutzername vollständig integriert, im nächsten Post geht es dann mit dem Key weiter.
Wenn dir dieser Post gefallen hat und du mich und dieses Projekt unterstützen möchtest, dann zeige dies mit einem Upvote.