2016-04-30 4 views
0

Я не могу сохранять и извлекать данные, используя SharedPreferences ... это приложение работает нормально, прежде чем я добавил базу данных для этого ..Не удается сохранять и извлекать данные из SharedPreferences в Android

я не могу понять, что я должен пройти 2 аргумент общего предпочтения. GetString ("ключ", "значение"); .. значение имеет то же, что и в методе putString?

вот мой код ..

public class MainActivity extends Activity { 
    TextView lbl; 
    EditText uName, uPass; 
    String name, pass; 
    SharedPreferences sr = getSharedPreferences("mp", MODE_PRIVATE); 
    SharedPreferences.Editor et = sr.edit(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     lbl = (TextView) findViewById(R.id.My_Label); 
     uName = (EditText) findViewById(R.id.userTxt); 
     uPass = (EditText) findViewById(R.id.passTxt); 

    } 

    //Register Method 
    public void doRegister(View v) { 

     if ((uName.getText().toString().equals("") && ((uPass.getText().toString()).equals("")))) 
      Toast.makeText(this, "Enter UserName and Password First to Get Registered", Toast.LENGTH_LONG).show(); 

     else { 
      name = uName.getText().toString(); 
      pass = uPass.getText().toString(); 

      //Save the user to the DataBase 


      et.putString("Name",name); 
      et.putString("Pswd",pass); 
      et.commit(); 

      //Alert user 
      Toast.makeText(this, "User Successfully Registered !", Toast.LENGTH_LONG).show(); 

      //Clear Login and pass field 
      uName.setText(""); 
      uPass.setText(""); 
     } 
    } 


    //Login Method 
    public void doLogin(View v) { 

     if ((uName.getText().toString().equals("") && ((uPass.getText().toString()).equals("")))) { 
      Toast.makeText(this, "Enter UserName and Password First", Toast.LENGTH_LONG).show(); 

     } 

     //User Authenticated 
     else if ((uName.getText().toString().equals(sr.getString("Name", name)) && ((uPass.getText().toString()).equals(sr.getString("Pswd", pass))))) { 

      Intent it = new Intent(this, SecActivity.class); 
      it.putExtra("user", name); 
      startActivity(it); 
     } else if (!((uName.getText().toString().equals(sr.getString("Name",name)) && !((uPass.getText().toString()).equals(sr.getString("Pswd",pass)))))) 
      Toast.makeText(this, "Wrong UserName or Password !", Toast.LENGTH_LONG).show(); 

     //Clears input 
     uName.setText(""); 
     uPass.setText(""); 

    } 

} 
+0

Где вы извлекаете текст из общих настроек? –

+0

@ helldawg13 здесь: if ((uName.getText(). ToString(). Equals (sr.getString («Name», name) –

+0

и кстати. Хранение только незашифрованных паролей в файле настроек - просто больная шутка. используйте SQLLite DB и шифрование паролей для получения лучших результатов. Любой, у кого есть корневое устройство, может видеть пароль, который вы сохраняете ... –

ответ

1

Я хотел бы предложить вам изменить свой код к этому:

private SharedPreferences sr; 
private SharedPreferences.Editor et; 

Сохранить значения в sharedPrefs.

public void doRegister(View v) { 

     if ((uName.getText().toString().equals("") && ((uPass.getText().toString()).equals("")))) 
      Toast.makeText(this, "Enter UserName and Password First to Get Registered", Toast.LENGTH_LONG).show(); 

     else { 
      name = uName.getText().toString(); 
      pass = uPass.getText().toString(); 

      //Save the user to the DataBase 

      sr = getSharedPreferences("mp", MODE_PRIVATE); 
      sr.edit(); 
      et.putString("Name",name); 
      et.putString("Pswd",pass); 
      et.apply(); 

      //Alert user 
      Toast.makeText(this, "User Successfully Registered !", Toast.LENGTH_LONG).show(); 

      //Clear Login and pass field 
      uName.setText(""); 
      uPass.setText(""); 
     } 
    } 

Получение значений из sharedPrefs:

//Login Method 
    public void doLogin(View v) { 
     sr = getSharedPreferences("mp", MODE_PRIVATE) 
     //You should put a default value in case the key does not 
     //exist so in our case an empty String. 
     String nameFromPrefs = sr.getString("Name", ""); 
     String passFromPrefs = sr.getString("Pswd", ""); 

     if ((uName.getText().toString().equals("") && ((uPass.getText().toString()).equals("")))) { 
      Toast.makeText(this, "Enter UserName and Password First", Toast.LENGTH_LONG).show(); 

     } 

     //User Authenticated 
     else if (uName.getText().toString().equals(nameFromPrefs) && (uPass.getText().toString().equals(passFromPrefs)) { 

      Intent it = new Intent(this, SecActivity.class); 
      it.putExtra("user", name); 
      startActivity(it); 
     } else if (!uName.getText().toString().equals(nameFromPrefs) && !uPass.getText().toString().equals(passFromPrefs)) 
      Toast.makeText(this, "Wrong UserName or Password !", Toast.LENGTH_LONG).show(); 

     //Clears input 
     uName.setText(""); 
     uPass.setText(""); 

    } 

Надеется, что это помогает !!!

+0

он разбился, когда я нажал на регистрацию. см. logcat здесь http://pastebin.com/YLtTQ4xA –

+0

Вы сделали следуйте моему методу? потому что sharedPreferences можно вызвать после onCreate, и вы вызвали их до того, как –

+0

решили его, добавив эту строку et = sr.edit(); ... спасибо за вашу помощь –