So ist meine App aufgebaut:
- Der Benutzer onResume () wird aufgefordert, sich anzumelden
- Wenn sich der Benutzer anmeldet, kann er die App 3 weiterhin verwenden . Wenn sich der Benutzer jederzeit abmeldet, möchte ich die Anmeldung erneut veranlassen
Wie kann ich das erreichen?
Hier ist meine Hauptaktivität:
@Override
protected void onResume(){
super.onResume();
isLoggedIn = prefs.getBoolean("isLoggedIn", false);
if(!isLoggedIn){
showLoginActivity();
}
}
Hier ist meine LoginActivity:
@Override
protected void onPostExecute(JSONObject json) {
String authorized = "200";
String unauthorized = "401";
String notfound = "404";
String status = new String();
try {
// Get the messages array
JSONObject response = json.getJSONObject("response");
status = response.getString("status");
if(status.equals(authorized)){
Toast.makeText(getApplicationContext(), "You have been logged into the app!",Toast.LENGTH_SHORT).show();
prefs.edit().putBoolean("isLoggedIn",true);
setResult(RESULT_OK, getIntent());
finish();
}
else if (status.equals(unauthorized)){
Toast.makeText(getApplicationContext(), "The username and password you provided are incorrect!",Toast.LENGTH_SHORT).show();
prefs.edit().putBoolean("isLoggedIn",true);
}
else if(status.equals(notfound)){
Toast.makeText(getApplicationContext(), "Not found",Toast.LENGTH_SHORT).show();
prefs.edit().putBoolean("isLoggedIn",true);
}
} catch (JSONException e) {
System.out.println(e);
} catch (NullPointerException e) {
System.out.println(e);
}
}
}
Nachdem sich der Benutzer erfolgreich angemeldet hat:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Toast.makeText(getApplicationContext(), "BOOM SHAKA LAKA!",Toast.LENGTH_SHORT).show();
}
}
Das Problem ist, dass onResume () vor onActivityResult () aufgerufen wird. Wenn sich der Benutzer erfolgreich angemeldet hat, wird meine Hauptaktivität nicht benachrichtigt, da onResume () zuerst aufgerufen wird.
Wo kann ich mich am besten zur Anmeldung auffordern?
quelle
onActivityResult
auch schon früher aufgerufen wurdeonStart
, was von vielen als Fehler angesehen wird: code.google.com/p/android/issues/detail?id=17787Bei Fragmenten ist es nicht einmal so einfach, wie
onActivityResult()
vor dem Aufruf von aufgerufen zu werdenonResume()
. Wenn die Aktivität, zu der Sie zurückkehren, in der Zwischenzeit entsorgt wurde, werden Sie feststellen, dass Aufrufe von (zum Beispiel)getActivity()
vononActivityResult()
null zurückgeben. Wenn die Aktivität jedoch nicht entsorgt wurde, gibt ein Aufruf vongetActivity()
die enthaltende Aktivität zurück.Diese Inkonsistenz kann zu schwer zu diagnostizierenden Fehlern führen. Sie können das Verhalten Ihrer Anwendung jedoch überprüfen, indem Sie die Entwickleroption "Aktivitäten nicht beibehalten" aktivieren. Ich neige dazu, dies eingeschaltet zu halten - ich würde eher eine
NullPointerException
in der Entwicklung als in der Produktion sehen.quelle
Möglicherweise möchten Sie den Anmeldestatus von der Aktivität entfernen. Wenn ein Benutzer beispielsweise Kommentare veröffentlichen kann, lassen Sie die Aktion onPost für den Anmeldestatus pingen und wechseln Sie von dort anstelle des Aktivitätsstatus.
quelle
Rückrufmethoden wie
onResume
sind keine geeigneten Orte, um die angeforderte Funktionalität zu erreichen. Ich würde vorschlagen, eine Klasse zu erstellen und dort die Anmelde- / Abmeldefunktion hinzuzufügen. Wenn ein Abruf zum Abmelden empfangen wird, rufen Sie die Anmeldefunktion auf.quelle