2012-09-19 17 views
6

Próbuję użyć sharedpreferences, aby sprawdzić, czy użytkownik zalogował się przed rozpoczęciem korzystania z aplikacji. I zapisać nazwę użytkownika shredpreferences gdy użytkownik logowanie.android - sharedpreferences return null value

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; 
     } 
    } 

} 

i starałem się sprawdzić wartość nazwa_użytkownika zanim zacznę moją główną działalność.

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(); 
    } 

, ale nazwa użytkownika jest zawsze pusta. Proszę pomóż. Dzięki

+0

Jeśli nazwa użytkownika kiedykolwiek była zerowa aplikacja będzie katastrofy, ponieważ nie jest możliwe, aby wywołać metodę z wartością null. A jeśli chcesz sprawdzić puste ciągi, lepiej użyć isEmpty(). –

Odpowiedz

9

Napisz poniżej kodu zamiast kodu, aby zapisać nazwę użytkownika w sharedpreferences.

I Użyj poniższego kodu Aby uzyskać wartość Preferencji.

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

@ chinna_82 Wydrukuj nazwę użytkownika w dzienniku i powiedz, co się stało ... –

17

Wywołanie getPreferences Oznacza to, że trzeba być w tej samej działalności. Korzystanie z getSharedPreferences umożliwia udostępnianie preferencji między czynnościami. Po prostu trzeba zdefiniować nazwę preferencji Dzwoniąc 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); 
    } 
Powiązane problemy