Est onResume() est appelée avant onActivityResult()?
Ici est de savoir comment mon application est posé:
- onResume() de l'utilisateur est invité à vous connecter à
- Si l'utilisateur se connecte, il peut continuer à utiliser l'application
3. Si l'utilisateur se connecte à n'importe quel moment, je veux vous invite vous connecter à nouveau
Comment puis-je y parvenir?
Voici mon MainActivity:
@Override
protected void onResume(){
super.onResume();
isLoggedIn = prefs.getBoolean("isLoggedIn", false);
if(!isLoggedIn){
showLoginActivity();
}
}
Voici mon 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);
}
}
}
Après que l'utilisateur s'est connecté avec succès dans:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Toast.makeText(getApplicationContext(), "BOOM SHAKA LAKA!",Toast.LENGTH_SHORT).show();
}
}
Le problème est, onResume() est appelée avant onActivityResult() ainsi, lorsque l'utilisateur s'est connecté avec succès dans, mon activité principale n'est pas notifié, car onResume() est appelé en premier.
Où est le meilleur endroit pour demander de connexion?
Vous devez vous connecter pour publier un commentaire.
L'appel à onActivityResult qui se passe avant onResume, en fait (voir les docs). Êtes-vous sûr que vous êtes en train de commencer l'activité, vous avez voulu avec
startActivityForResult
et que vous êtes en paramètre le résultat de la invoqué l'activité deRESULT_OK
avant de retourner une valeur à votre activité? Essayez juste de mettre unLog
déclaration dans votreonActivityResult
de journal de la valeur et assurez-vous que reçoit le coup. Aussi, où en êtes-vous de définir la valeur de laisLoggedIn
préférence? Il semble que vous devriez être en le définissant àtrue
dans votre activité de connexion avant de revenir de toute façon, mais c'est clairement pas passe.onActivityResult
est aussi appelé avantonStart
, qui est considéré comme un bug par beaucoup de gens: code.google.com/p/android/issues/detail?id=17787Avec les fragments, il n'est même pas aussi simple que
onActivityResult()
être appelée avant l'appel àonResume()
. Si l'activité que vous êtes de retour à l'été éliminés dans l'intervalle, vous trouverez que les appels à (par exemple)getActivity()
deonActivityResult()
retournera null. Toutefois, si l'activité n'a pas été disposé, à un appel àgetActivity()
sera de retour le contenant de l'activité.Cette incohérence peut être une source de dur-à-diagnostiquer des défauts, mais vous pouvez vérifier le comportement de votre application, en permettant au développeur de l'option "Ne pas garder activités". J'ai tendance à garder cette allumé - je préfère voir une
NullPointerException
dans le développement que dans la production.Vous pouvez envisager d'abstraction de l'état de connexion de l'activité. Par exemple, si un utilisateur peut poster des commentaires, laissez-le onPost action ping pour la connexion de l'etat et à partir de là, au lieu de partir de l'activité de l'état.