2012-09-19 40 views
6

Estoy tratando de usar las preferencias compartidas para verificar si el usuario inició sesión antes de que comiencen a usar la aplicación. Ahorro el nombre de usuario en shredpreferences cuando el usuario inicia sesión en.android - sharedpreferences return value nulo

Login.java

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login);  
     Button btnLogin = (Button) findViewById(R.id.buttonlogin);  
     btnLogin.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View adapt) { 
       EditText usernameEditText = (EditText) findViewById(R.id.EditUserName); 
       userName = usernameEditText.getText().toString(); 
       EditText passwordEditText = (EditText) findViewById(R.id.EditPassword); 
       userPassword = passwordEditText.getText().toString();    
       if (userName.matches("") && userPassword.matches("")) { 
        toast("Please enter Username and Password"); 
        return; 
       } else if (userName.matches("") || userName.equals("")) { 
        toast("Please enter Username"); 
        return; 
       } else if (userPassword.matches("") || userPassword.equals("")) { 
        toast("Please enter Password"); 
        return; 
       } else { 
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
        SharedPreferences.Editor editor = sharedPreferences.edit(); 
        editor.putString("MEM1", userName); 
        editor.commit(); 
        new DownloadFilesTask().execute(); 
       }   
      } 
     }); 
    } 

    private void toast(String text) { 
     Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); 
    } 

    private class DownloadFilesTask extends AsyncTask<Void, Void, Void> { 
     protected void onPreExecute() { 
     } 

     protected void onPostExecute(Void result) { 
      toast("user logged in"); 
      startActivity(new Intent(Login.this, MainActivity.class)); 
      finish(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) {   
      return null; 
     } 
    } 

} 

y traté de comprobar el valor de nombre de usuario antes de empezar mi mainactivity.

SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    String username =sharedPreferences.getString("MEM1", ""); 
    if(username.equalsIgnoreCase("")||username.length()==0) 
    { 
     toast("username is null"); 
     startActivity(new Intent(MainActivity.this, Login.class)); 
     finish(); 
    } 

pero el nombre de usuario es siempre nulo. Por favor ayuda. Gracias

+0

Si su nombre de usuario cada vez era nula su aplicación se estrellaría porque no es posible llamar a un método de un valor nulo. Y si desea comprobar si hay cadenas vacías, es mejor usar isEmpty(). –

Respuesta

9

Escriba a continuación Código en lugar de su código para guardar el nombre de usuario en las preferencias compartidas.

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); 
SharedPreferences.Editor editor = myPrefs.edit(); 
editor.putString("MEM1", userName); 
editor.commit(); 

Y Use el código de abajo para obtener el valor de Preferencias.

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); 
String username = myPrefs.getString("MEM1",""); 
+0

@ chinna_82 Imprime el nombre de usuario en el registro y dime qué sucedió ... –

17

Calling getPreferences significa que usted tiene que estar en la misma actividad. El uso de getSharedPreferences le permite compartir las preferencias entre actividades. Sólo hay que definir un nombre para las preferencias al llamar getSharedPreferences("Pref name here", MODE_PRIVATE);

1
private final String TAXI_SPREF = "TAXI_SHARED_PREFERENCES"; 

//set-save data to shared preferences 
SharedPreferences.Editor sPEditor = getSharedPreferences(TAXI_SPREF, MODE_PRIVATE).edit(); 
sPEditor.putInt("USERID", etUserID.getText().toString()); 
sPEditor.putString("EMAIL", etEmail.getText().toString()); 
sPEditor.apply(); 

//get data from shared preferences 

SharedPreferences sharedPreferences = getSharedPreferences(TAXI_SPREF, MODE_PRIVATE); 
int userID = sharedPreferences.getInt("USERID", 0); 
string email = sharedPreferences.getString("EMAIL", 0); 
////////  or   ///// 
String email = getSharedPreferences(TAXI_SPREF, MODE_PRIVATE).getString("EMAIL","EMPTY"); 
    if (!email.equals("EMPTY")){ 
     etEmail.setText(email); 
    } 
Cuestiones relacionadas