2016-12-19 4 views
1

J'ai effectué une activité de connexion simple dans laquelle j'ai utilisé la base de données android sqlite pour stocker les informations de connexion, c'est-à-dire le nom d'utilisateur et le mot de passe. Lorsque l'utilisateur clique sur le bouton Créer un compte lors d'une activité d'inscription, il sera transféré vers une autre activité où il pourra voir son nom d'utilisateur et son mot de passe. Dans cet écran, je dois vérifier si les préférences sont claires et ensuite le texte du bouton sera modifié en fonction de la décision.Impossible d'effacer les préférences partagées

J'ai passé l'information entre les activités utilisant SharedPreference, mais je ne peux pas le supprimer ou l'effacer lorsque l'utilisateur clique déconnectent .. Voici le code des deux activités ..

Voici mon SignUp.java

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.signup); 

    // get Instance of Database Adapter 
    loginDataBaseAdapter=new LoginDataBaseAdapter(this); 
    loginDataBaseAdapter=loginDataBaseAdapter.open(); 

    // Get Refferences of Views 
    editTextUserName=(EditText)findViewById(R.id.editTextUserName); 
    editTextPassword=(EditText)findViewById(R.id.editTextPassword); 
    editTextConfirmPassword=(EditText)findViewById(R.id.editTextConfirmPassword); 
    tv=(TextView)findViewById(R.id.textView); 

    btnCreateAccount=(Button)findViewById(R.id.buttonCreateAccount); 
    btnCreateAccount.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      String userName=editTextUserName.getText().toString(); 
      String password=editTextPassword.getText().toString(); 
      String confirmPassword=editTextConfirmPassword.getText().toString(); 

      // check if any of the fields are vaccant 
      if(userName.equals("")||password.equals("")||confirmPassword.equals("")) { 
       Toast.makeText(getApplicationContext(), "Field Vaccant", Toast.LENGTH_LONG).show(); 
       return; 
      } 
      // check if both password matches 
      if(!password.equals(confirmPassword)) { 
       Toast.makeText(getApplicationContext(), "Password does not match", Toast.LENGTH_LONG).show(); 
       return; 
      } 
      if(password.length()<8) { 
       Toast.makeText(getApplicationContext(),"Password must be 8 digits longer",Toast.LENGTH_LONG).show(); 
      } 
      else { 
       // Save the Data in Database 
       loginDataBaseAdapter.insertEntry(userName, password); 
       try { 

        sharedPreferences= PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

        SharedPreferences.Editor editor = sharedPreferences.edit(); 
        editor.putString(Name,userName); 
        editor.putString(Pass,password); 
        editor.commit(); 

       } catch (NullPointerException e) { 
        e.printStackTrace(); 
       } 

       intent=new Intent(getApplicationContext(),AfterLogin.class); 
       startActivity(intent); 
       Toast.makeText(getApplicationContext(), "Account Successfully Created ", Toast.LENGTH_LONG).show(); 
      } 
     } 
    }); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    loginDataBaseAdapter.close(); 
} 

et le AfterLogin.Java

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.afterlogin); 

    username=(TextView)findViewById(R.id.Username); 
    name=(TextView)findViewById(R.id.Name); 
    user=(TextView)findViewById(R.id.User); 
    pass=(TextView)findViewById(R.id.Pass); 
    sout=(Button)findViewById(R.id.SignOut); 

    s= sharedPreferences.getString(Name,""); 
    us=sharedPreferences.getString(Pass,""); 

    username.setText(s); 
    name.setText(s); 
    user.setText(s); 
    pass.setText(us); 

    sout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      SharedPreferences.Editor editor=sharedPreferences.edit(); 
      editor.clear(); 
      editor.commit(); 

      String n=sharedPreferences.getString(Name,""); 

      if (n == null) { 
       sout.setText("Signed Out"); 
      } 
     } 
    }); 
} 
+0

Le code a l'air correct, je suppose. Essayez de créer un [mcve] –

+0

Où initialiser l'objet 'sharedPreferences' dans AfterLogin? –

Répondre

1

AfterLogin.java vous avez vérifié

n == null

mais passée la valeur par défaut comme vide pour cordes n

Chaîne n = sharedPreferences.getString (Nom , ""); // VIDES

changement

if (n==null) { 
    sout.setText("Signed Out"); 
} 

à

if (n.isEmpty()) { 
    sout.setText("Signed Out"); 
} 
+0

Merci .. frère vous avez sauvé beaucoup de mon temps ... –

0

Pouvez-vous essayer en engageant clair et engager dans une seule ligne. Comme editor.clear(). Commit() ou editor.clear(). Apply(). Cela peut vous aider puisque vous validez ou appliquez des modifications sur l'objet éditeur après avoir apporté des modifications.

0

Le problème pourrait être que vous utilisez String n=sharedPreferences.getString(Name,""); qui retourne toujours quelque chose. Valeur par défaut si la préférence n'existe pas ou si elle existe.

Pour vérifier si une préférence a été supprimée, il vaut mieux utiliser String n=sharedPreferences.contains(Name); qui renvoie un booléen qui indique si la préférence existe ou non.

J'espère que ça aide!