2012-02-21 29 views
14

Me gustaría tener un botón de casilla de verificación para recordar el Id. De usuario y la contraseña. ¿Alguien puede por favor guiarme en la dirección correcta sobre cómo comenzar?Agregue una casilla de verificación "Recordarme"

+0

¿Ya construir la función de inicio de sesión completo, excepto la funcionalidad de recordar? – WarrenFaith

Respuesta

58

Acabo de construir esto en mi aplicación, aquí está el código básico y un poco de explicación:

Básicamente, la clave aquí es SharedPreferences. Configurará un objeto SharedPreferences y almacenará su nombre de usuario y contraseña después de que el usuario los haya ingresado. Luego, cuando vuelvan a ejecutar la aplicación, las preferencias tendrán sus datos almacenados y luego volverán a llenar los campos de inicio de sesión.

LoginActivity.java

package com.realsimpleapps.LoginTesting; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.EditText; 

public class LoginActivity extends Activity implements OnClickListener { 

    private String username,password; 
    private Button ok; 
    private EditText editTextUsername,editTextPassword; 
    private CheckBox saveLoginCheckBox; 
    private SharedPreferences loginPreferences; 
    private SharedPreferences.Editor loginPrefsEditor; 
    private Boolean saveLogin; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 

     ok = (Button)findViewById(R.id.buttonLogin); 
     ok.setOnClickListener(this); 
     editTextUsername = (EditText)findViewById(R.id.editTextUsername); 
     editTextPassword = (EditText)findViewById(R.id.editTextPassword); 
     saveLoginCheckBox = (CheckBox)findViewById(R.id.saveLoginCheckBox); 
     loginPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE); 
     loginPrefsEditor = loginPreferences.edit(); 

     saveLogin = loginPreferences.getBoolean("saveLogin", false); 
     if (saveLogin == true) { 
      editTextUsername.setText(loginPreferences.getString("username", "")); 
      editTextPassword.setText(loginPreferences.getString("password", "")); 
      saveLoginCheckBox.setChecked(true); 
     } 
    } 

    public void onClick(View view) { 
     if (view == ok) { 
      InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(editTextUsername.getWindowToken(), 0); 

      username = editTextUsername.getText().toString(); 
      password = editTextPassword.getText().toString(); 

      if (saveLoginCheckBox.isChecked()) { 
       loginPrefsEditor.putBoolean("saveLogin", true); 
       loginPrefsEditor.putString("username", username); 
       loginPrefsEditor.putString("password", password); 
       loginPrefsEditor.commit(); 
      } else { 
       loginPrefsEditor.clear(); 
       loginPrefsEditor.commit(); 
      } 

      doSomethingElse(); 
     } 
    } 

    public void doSomethingElse() { 
     startActivity(new Intent(LoginActivity.this, MainActivity.class)); 
     LoginActivity.this.finish(); 
    } 
} 

El método al final, doSomethingElse() es el marcador de posición para ir al siguiente paso para su aplicación. Mi método doSomethingElse() simplemente carga otra actividad.

Aquí es un archivo XML básico para la página de inicio de sesión:

login.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#000" 
    android:padding="10dp" > 

    <EditText 
     android:id="@+id/editTextUsername" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/imageView1" 
     android:hint="Username" 
     android:inputType="textNoSuggestions" 
     android:imeOptions="actionNext" /> 

    <EditText 
     android:id="@+id/editTextPassword" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/editTextUsername" 
     android:hint="Password" 
     android:inputType="textPassword" 
     android:imeOptions="actionDone" /> 

    <CheckBox 
     android:id="@+id/saveLoginCheckBox" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/editTextPassword" 
     android:text="Save Login?" 
     android:textColor="#FFF" /> 

    <Button 
     android:id="@+id/buttonLogin" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/saveLoginCheckBox" 
     android:layout_marginTop="40dp" 
     android:text="Login" /> 

</RelativeLayout> 

IMPORTANTE: Es probable que desee para cifrar la contraseña antes de almacenarla en SharedPreferences. Los detalles para eso están más allá del alcance de esta pregunta, pero aquí está el código que solía hacer eso: http://www.androidsnippets.com/encryptdecrypt-strings. También tendrás que idear algún tipo de esquema clave.

Este código ha sido probado en Android 2.1, SDK 7. Avísame cómo te funciona.

David

+1

Muchas gracias por toda su ayuda David! Me llevó unos 40 minutos entenderlo. Me puse en marcha y ahora :) –

+1

¡Funciona a la perfección! Gracias .. – TharakaNirmana

+1

simplemente toke algo de código para mi aplicación, funcionó bien! – Bachask8

Cuestiones relacionadas