Code android pour maintenir l'utilisateur connecté après la première authentification (SharedPreferences)

Lorsque vous créez une application nécessitant que l'utilisateur se connecte, vous devez implémenter la fonctionnalité de rappel afin que l'utilisateur ne saisisse plus le nom d'utilisateur et le mot de passe pour accéder à l'interface principale de l'application. En Android, vous pouvez utiliser SharedPreferences pour stocker les informations de connexion. Les données stockées dans les SharedPreferences ne sont pas supprimées par défaut même si vous quittez l'application. Dans ce tuto, je vais vous montrer comment stocker les informations de connexion dans les SharedPreferences et effacer les informations des SharedPreferences.
Maintenant, vous devez créer un nouveau projet Android. Modifiez ensuite le fichier activity_main.xml pour ajouter  deux EditText, un CheckBox et un bouton. Un EditText est destiné à enter le nom de l'utilisateur et un autre EditText permet la saisie du mot de passe. Avec la CheckBox, l'utilisateur peut la cocher pour se souvenir de son nom d'utilisateur et du mot de passe. Le bouton est enfoncé pour valider les informations de connexion.

activity_main.xml 


<?xml version="1.0" encoding="utf-8"?><LinearLayout 
    
 xmlns:android="http://schemas.android.com/apk/res/android"   
 xmlns:tools="http://schemas.android.com/tools"   
 android:layout_width="match_parent"    
 android:layout_height="match_parent"   
 android:orientation="vertical">
    <EditText       
      android:id="@+id/txt_user"        
      android:layout_width="fill_parent"        
      android:layout_height="wrap_content"        
      android:hint="Login"        
      android:inputType="text"        
      android:layout_marginLeft="10dp"        
      android:layout_marginRight="10dp" />

    <EditText        
     android:id="@+id/txt_pwd"        
     android:layout_width="fill_parent"        
     android:layout_height="wrap_content"        
     android:hint="Password"        
     android:inputType="textPassword"        
     android:layout_marginLeft="10dp"        
     android:layout_marginRight="10dp" />
    <CheckBox        
     android:id="@+id/ch_rememberme"        
     android:layout_width="wrap_content"        
     android:layout_height="wrap_content"       
     android:text="Rester connecté"        
     android:layout_marginLeft="10dp"        
     android:layout_marginRight="10dp" />
    <Button        
     android:id="@+id/btlogin"      
     android:layout_width="match_parent"       
     android:layout_height="wrap_content"      
     android:onClick="doLogin"      
     android:layout_gravity="center"       
     android:text="Log in"       
     android:layout_marginLeft="10dp"        
     android:layout_marginRight="10dp"        
     android:textColor="#ffffff"  />
</LinearLayout>

MainActivity.java


import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    public static String  PREFS_NAME="mypre";
    public static String PREF_USERNAME="username";
    public static String PREF_PASSWORD="password";
    EditText txtuser,txtpwd;
    String username="123";
    String password="admin";
    Button login;
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SharedPreferences pref = 
        getSharedPreferences(PREFS_NAME,MODE_PRIVATE);
        String userna = pref.getString(PREF_USERNAME, null);
        String pass = pref.getString(PREF_PASSWORD, null);
        if (userna != null || pass != null) 
        {
            
   Intent intent=new Intent(getApplicationContext(),
                            LogoutActivity.class);
            intent.putExtra("user",username);
            startActivity(intent);
        }
         txtuser=(EditText)findViewById(R.id.txt_user);
       txtpwd=(EditText)findViewById(R.id.txt_pwd);

        login=findViewById(R.id.btlogin);
        login.setOnClickListener(new View.OnClickListener() 
           {
            @Override            public void onClick(View view) {
                if(txtuser.getText().toString().equals(username) 
                   && txtpwd.getText().toString().equals(password)) {
                    CheckBox ch = (CheckBox) findViewById(R.id.ch_rememberme);
                    if (ch.isChecked()) 
                     {
                        getSharedPreferences(PREFS_NAME, MODE_PRIVATE)
                                .edit()
                                .putString(PREF_USERNAME, username)
                                .putString(PREF_PASSWORD, password)
                                .commit();

                        Intent intent=new Intent
                         (getApplicationContext(), LogoutActivity.class);
                        intent.putExtra("user",username);
                        startActivity(intent);
                    }
      else{
          Toast.makeText(MainActivity.this, 
        "Invalid username or password", Toast.LENGTH_LONG).show();
            }

            }
            }
        });
    }
}

Nous devons maintenant créer une nouvelle activité qui sert comme un tableau de bord (Espace personnel) de l'utilisateur connecté. Cette activité va contenir un bouton qui permet à l'utilisateur de se déconnecter. Le bouton de déconnexion permet d’effacer le contenu stocké auparavant dans le SharedPreferences .

activity_logout.xml 


<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent">

    <TextView        android:id="@+id/txtuser"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dip"        />

    <Button        android:id="@+id/btlogout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Log out"
        android:layout_below="@+id/txtuser"
        />

</RelativeLayout>

LogoutActivity.java

import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class LogoutActivity extends AppCompatActivity {
String user;
Button logout;
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_logout);
        //get username sent from the log in activity        logout=findViewById(R.id.btlogout);
        Intent intent=getIntent();
        Bundle b=intent.getExtras();
        user=b.getString("user");
        TextView v=(TextView)findViewById(R.id.txtuser);
        v.setText("Bonjour "+user);

        logout.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View view) {
                SharedPreferences sharedPrefs =
                getSharedPreferences(MainActivity.PREFS_NAME,MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedPrefs.edit();
                editor.clear();
                editor.commit();
                user="";
                //Afficher formulaire d'authentification                Intent intent=new Intent(getApplicationContext(), 
                                         MainActivity.class);
                startActivity(intent);
            }
        });
    }
}

Commentaires

Posts les plus consultés de ce blog

Ionic 2 : Envoie d'une image vers un serveur web à l'aide de PHP et Angular 2

Premier tutoriel avec Arduino et Proteus ISIS

Login et password ,formulaire d'authentification sous android avec mysql et json