i ont une activité principale qui lancent un LoginActivity pour la première fois. Ici tout va bien. Lorsque l'utilisateur se connecte, les informations de l'utilisateur sont sauvegardées dans des préférences partagées (pour faire une demande à ApiRest) donc cette fonction qui ouvre la connexion seulement la première fois fonctionne parce que la prochaine fois que je démarre l'application je reste dans mainActivity. cette activité principale a 3 fragments (dans viewpager) les 3 frgaments quand sont créés font demande d'obtenir des informations de l'API automatiquement. mon problème est dans l'appbar de la mainActivity j'ai un élément de menu qui déconnecte l'utilisateur. mon intention est de rediriger l'application vers loginActivity et d'effacer la pile d'activités et effacer les préférences partagées. mais mes résultats sont. 1. Je suis redirigé vers l'activité de connexion mais quand je ferme l'application et l'ouvre à nouveau, elle ne respecte pas ma méthode dans l'activité principale (si c'est la première fois qu'elle doit rediriger vers LoginActivity) et crée les 3 fragments qui commencent immédiatement pour faire les demandes mais ils n'ont pas les paramètres (ils sont nuls ou 0 puisque j'efface les préférences partagées) donc l'application se bloque. Pourquoi ma méthode pour ouvrir la première fois LoginActivity est omise ??? grâce à l'avanceméthode logout Android et sharedpreference clair ne fonctionne pas
voici mon MainActivity avec la méthode qui échoue ou l'omission après la déconnexion
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Variables variableGlobal = (Variables)getApplicationContext();
SharedPreferences sharedPreferences= getSharedPreferences("firstTime",this.MODE_PRIVATE);
boolean firstTime = sharedPreferences.getBoolean("firstTime",true);
if(firstTime){
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.putBoolean("firstTime", false);
edit.commit();
startActivity(new Intent(MainActivity.this, LoginActivity.class));
finish();
}....
ici est mon code logout:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.logoutmain) {
//Here i clear the sharedpref datos wich contains the user information
SharedPreferences pref = getSharedPreferences("datos",MODE_PRIVATE);
SharedPreferences.Editor editorpref = pref.edit();
editorpref.clear();
editorpref.commit();
//Here i clear the sharedPref that contains the value (boolean) to say the app if it is the first time or not
SharedPreferences pref2 = getSharedPreferences("firstTime",this.MODE_PRIVATE);
SharedPreferences.Editor editorpref2 = pref2.edit();
editorpref2.putBoolean("firstTime",true);
editorpref2.commit();
System.out.println("shared pref cleared");
Intent intent=new Intent(getApplicationContext(),MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
return true;
}...
voici mon loginActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
btnLogin= (Button)findViewById(R.id.btnLogin);
api= ApiUtils.getAPIService();
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
login();
}
});
}
Rappelez-vous, quand je lance mon application, la méthode pour vérifier si elle est le firstTime qui exécute ce lancer à LoginActivity fonctionne bien, il est seulement lancé le firsTime et la prochaine fois que j'ouvre toujours dans Main Activity, mais quand je me déconnecte il me redirige vers Login et efface la stack et le sharedpref, MAIS OMITT la méthode pour chek c'est le première fois et me garde dans MainActivity et l'application se bloque. Pourquoi?? grâce à Adavanced
Eh bien, je suppose que vous ne devriez pas vérifier cette préférence « firstTime » vous » Ve sur la méthode OnCreate. Vous le définissez sur false après l'avoir vérifié, de sorte que MainActivity démarre comme si l'utilisateur était déjà connecté après la fermeture de l'application. Vous pouvez vérifier votre « datos » présence au lieu de « firstTime » oui – Daivid
homme, mais dans la méthode logout i am sUPPrimer les sharedpreferences, et tournez à TRUE, vérifier ma méthode logout s'il vous plaît. – matQ
Oui, mais vous ne définissez pas à vrai quand l'activité se termine par elle-même, êtes-vous? le commentaire de Nabis pourrait le réparer btw. – Daivid