2012-04-01 14 views
14

Estoy creando un proyecto en el que tengo una pantalla de inicio de sesión, que se usa para que el usuario inicie sesión en la aplicación
. Esta pantalla de inicio de sesión solo debe estar visible la primera vez, de modo que el usuario puede completarla e iniciar sesión, pero cuando el usuario abre la aplicación por segunda vez, la aplicación debe mostrar main.activity. Cómo usar Shared preference.¿Cómo mostrar la pantalla de inicio de sesión solo una vez?

No entiendo cómo hacerlo.

+0

El enlace que intentó compartir con nosotros estaba mal formado. Por favor edite su pregunta para agregar el enlace correcto. –

Respuesta

30

Para lograr esto con SharedPreferences que podría hacer algo como esto:

insertar los siguientes en cualquier Clase se ve más en forma. Supongamos que inserta esto en la clase Example.

//Give your SharedPreferences file a name and save it to a static variable 
public static final String PREFS_NAME = "MyPrefsFile"; 

Ahora, en el método que evalúa si el usuario inicia sesión con éxito en, haga lo siguiente. Observe la clase Example, debe cambiar esto para que coincida con su código.

//User has successfully logged in, save this information 
// We need an Editor object to make preference changes. 
SharedPreferences settings = getSharedPreferences(Example.PREFS_NAME, 0); // 0 - for private mode 
SharedPreferences.Editor editor = settings.edit(); 

//Set "hasLoggedIn" to true 
editor.putBoolean("hasLoggedIn", true); 

// Commit the edits! 
editor.commit(); 

Por último, cuando su aplicación se inicia ahora se puede evaluar si el usuario ya ha iniciado sesión o no. Sin embargo, observe la clase Example que debe cambiar.

SharedPreferences settings = getSharedPreferences(Example.PREFS_NAME, 0); 
//Get "hasLoggedIn" value. If the value doesn't exist yet false is returned 
boolean hasLoggedIn = settings.getBoolean("hasLoggedIn", false); 

if(hasLoggedIn) 
{ 
    //Go directly to main activity. 
} 

Esperanza esto ayuda

EDIT: Para evitar que el usuario utilice el botón Atrás para volver a la actividad de sesión que tiene que finish() la actividad después de comenzar una nueva.

siguiente código tomado de Forwarding.java | Android developers

// Here we start the next activity, and then call finish() 
// so that our own will stop running and be removed from the 
// history stack 
Intent intent = new Intent(); 
intent.setClass(Forwarding.this, ForwardTarget.class); 
startActivity(intent); 
Example.this.finish(); 

Por lo tanto, lo que tiene que hacer en su código es llamar a la función finish() en la actividad de inicio de sesión, después de llamar startActivity().

Consulte también: Removing an activity from the history stack

+0

muestra el error en (Example.PREFS_NAME, 0); y necesito agregar este código en qué actividad? –

+0

@sandiparmal lea atentamente mi respuesta, le indico dónde debe insertar el código. La clase 'Example' debe modificarse para que coincida con la clase en la que creó la variable estática' PREFS_NAME'. –

+1

todavía salta en el inicio de sesión incluso después de completar los datos. ¿Puedo colocar el código? –

1

Use SharedPreferences. Por ejemplo, guarde algún valor y léalo en su Actividad de inicio de sesión.

En nuestro proyecto guardamos el token y la identificación del usuario. Entonces, si el usuario ya inició sesión, omitimos la Actividad de autorización.

P.S. Si su actividad de inicio de sesión es la primera en su aplicación, entonces no olvide terminarla, antes de comenzar otra Actividad, para evitar presionar la tecla "Atrás" en otras actividades.

+1

donde almaceno este valor significa ¿en qué actividad? –

+0

http://developer.android.com/guide/topics/data/data-storage.html#pref –

1

Use SharedPreferences. Por ejemplo, tenga una variable booleana y léala en su aplicación. En su caso, cuando el usuario inicia la aplicación la primera vez que la variable en preferencia compartida será falsa, inicie la pantalla de inicio de sesión y luego de iniciarla correctamente, haga que esa variable booleana sea verdadera en preferencia compartida, de modo que cuando el usuario vea el tiempo la preferencia será verdadera. así que omita la pantalla de inicio de sesión e inicie su actividad principal.

Para almacenar boolean en uso SharedPreference continuación Código ::

public static void saveBooleanInSP(Context _context, boolean value){ 
SharedPreferences preferences = _context.getSharedPreferences("PROJECTNAME", android.content.Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putBoolean("ISLOGGEDIN", value); 
editor.commit(); 
}//savePWDInSP() 

Para getValue de SharedPreference utilizar a continuación el código ::

public static boolean getBooleanFromSP(Context _context) { 
// TODO Auto-generated method stub 
SharedPreferences preferences = _context.getSharedPreferences("PROJECTNAME", android.content.Context.MODE_PRIVATE); 
return preferences.getBoolean("ISLOGGEDIN", false); 
}//getPWDFromSP() 
1

se debe añadir otra actividad vacía (sin interfaz de usuario) que las cargas antes de nada.

Ponga la lógica descrita por @Telmo Marques en esta actividad vacío, que es el responsable de dirigir al usuario ya sea a la LoginScreen.Activity o para Main.Activity

ver aquí, respuesta por @tozka How to Skip the first activity under a condition

0

Usar token también es un buen método para conocer el estado de inicio de sesión. En el inicio de sesión basado en tokens de Oauth, cuando el usuario inicia sesión en la aplicación recibirá un token de acceso cuando inicie sesión exitosamente y se guarda en el administrador de cuenta de manera segura. cuando el usuario abra la aplicación, primero compruebe la disponibilidad del token y, si está disponible, redirija a la página principal a la actividad de inicio de sesión. .

Cuestiones relacionadas