2016-04-19 11 views
0

Ich habe ein Fragment namens LoginFragment, über das sich ein Benutzer zum ersten Mal registrieren kann, indem er auf die Schaltfläche Registrieren klickt. Wenn Sie auf diese Schaltfläche klicken, öffnet sich ein neues Fragment namens RegisterFragment, in dem der Benutzer einen neuen Benutzernamen und ein neues Kennwort zur Registrierung auswählt und eingibt. Wenn ich die App starte und die Felder unter Registrierung eintrage und OK wähle, erscheint im Toast "Saved Info" wie es soll. Wenn ich mich jedoch mit dem Benutzernamen und dem Passwort anmelde, für das ich mich registriert habe, erkennt die App die Info nicht und zeigt den Toast "Bitte Einträge überprüfen und erneut versuchen" an, der nur angezeigt werden sollte, wenn der Benutzername bereits existiert oder das Passwort falsch ist , was in meinem Fall nicht der Fall ist.SharedPreferences von einem Fragment registriert keine Daten für eine Login-Aktivität auf einem anderen Fragment

Werden in den SharedPreferences die Werte für Benutzername und Passwort nicht gespeichert, weil ich mit zwei verschiedenen Fragmenten arbeite? Jede Hilfe wäre willkommen!

RegisterFragment.java

public class RegisterFragment extends Fragment { 

    Button register_btn; 
    EditText username_signup_ET, password_signup_ET; 

    private String KEY_UID = "uid"; 
    private String KEY_PASSWORD = "pwd"; 
    private final String PREFER_NAME = "Registry"; 
    private SharedPreferences sharedPreferences; 
    private SharedPreferences.Editor editor; 
    String username; 

    //LoginDataBaseAdapter loginDataBaseAdapter; 
    Context context; 
    public void myAlertDialog(){ 
    context = getActivity(); 
    } 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState){ 

     View v = inflater.inflate(R.layout.register_fragment_layout, container, false); 

     sharedPreferences = getActivity().getSharedPreferences("loginPrefs", Context.MODE_PRIVATE);; 
     editor = sharedPreferences.edit(); 


     username_signup_ET = (EditText)v.findViewById(R.id.username_signup_ET); 
     password_signup_ET = (EditText)v.findViewById(R.id.password_signup_ET); 

     register_btn = (Button)v.findViewById(R.id.register_btn); 
     register_btn.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 

      String userName = username_signup_ET.getText().toString(); 
      String password = password_signup_ET.getText().toString(); 

      if(userName.equals("")||password.equals("")) 
      { 
       Toast.makeText(getActivity(), "Please Enter Values in all Fields!", Toast.LENGTH_SHORT).show(); 
      } 
      else{ 
      register(); 
      launchLogin(); 
      } 
      } 
     }); 
     return v; 
    } 

    //launch login activity 
    public void launchLogin(){ 
     FragmentManager FM = getFragmentManager(); 
     FragmentTransaction FT = FM.beginTransaction(); 
     LoginFragment LG = new LoginFragment(); 
     FT.addToBackStack("LG"); 
     FT.replace(R.id.fragment_one_id, LG); 
     FT.commit(); 
    } 

    // register your account 
      private void register() { 
       // prefix the keys with the user name 
       editor.putString("userName" + "_" + KEY_UID, username_signup_ET.getText() 
         .toString()); 
       editor.putString("password" + "_" + KEY_PASSWORD, password_signup_ET.getText() 
         .toString()); 
       //editor.commit(); // commit the values 
       editor.apply(); 

       Toast.makeText(getActivity(), "Saved Info!", Toast.LENGTH_SHORT).show(); 

      }// end of register 

} 

LoginFragment.java

public class LoginFragment extends Fragment { 


    Button login_btn, register_btn; 
    EditText username_ET, password_ET; 

    private String KEY_UID = "uid"; 
    private String KEY_PASSWORD = "pwd"; 
    private final String PREFER_NAME = "Registry"; 
    private SharedPreferences sharedPreferences; 
    private SharedPreferences.Editor editor; 
    String username; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState){ 
     super.onCreateView(inflater, container, savedInstanceState); 

     View v = inflater.inflate(R.layout.login_fragment_layout, container, false); 

     sharedPreferences = getActivity().getSharedPreferences("loginPrefs", Context.MODE_PRIVATE); 
     editor = sharedPreferences.edit(); 

     username_ET = (EditText)v.findViewById(R.id.username_ET); 
     password_ET = (EditText)v.findViewById(R.id.password_ET); 
     login_btn = (Button)v.findViewById(R.id.login_btn); 
     register_btn = (Button)v.findViewById(R.id.register_btn); 


     login_btn.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       // initialize username 
       username = username_ET.getText().toString(); 

       boolean valid = isValid(); 
       if (valid) { 
        String text = getResources().getString(R.string.logging_in_str); 
        Toast.makeText(getActivity().getApplicationContext(), text, 
          Toast.LENGTH_SHORT).show(); 
        if (!userExists() | !(passwordCorrect())) { 
         text = getResources().getString(
           R.string.error_username_str); 
         Toast.makeText(getActivity().getApplicationContext(), text, 
           Toast.LENGTH_SHORT).show(); 
        } else { 
         Intent i = new Intent(getActivity(), DiaryActivity.class); 
         startActivity(i); 
        } 
       } 


       //sharedPreferences = getActivity().getSharedPreferences("loginPrefs", Context.MODE_PRIVATE); 

       //get username and password from EditText 
       String userName = username_ET.getText().toString(); 
       String password = password_ET.getText().toString(); 


       if(username_ET.length() > 0 && password_ET.length() > 0) { 
        String uName = null; 
        String uPassword = null; 



        if (sharedPreferences.contains(userName)) { 
         uName = sharedPreferences.getString("userName", ""); 

        } 

        if (sharedPreferences.contains(password)) { 
         uPassword = sharedPreferences.getString("password", ""); 

        } 

        //start new activity 
        if (userName.equals(uName) && password.equals(uPassword)) { 


         Toast.makeText(getActivity(), "You entered: " + uName, Toast.LENGTH_SHORT).show(); 
         Intent i = new Intent(getActivity(), DiaryActivity.class); 
         startActivity(i); 
        } 
       } 
       //String userName = sharedPreferences.getString("userName", ""); 
       //String pw = sharedPreferences.getString("password", ""); 

       //sharedPreferences.getString("uid", ""); 
       //sharedPreferences.getString("pwd", ""); 
      } 
     }); 

     register_btn.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       FragmentManager FM = getFragmentManager(); 
       FragmentTransaction FT = FM.beginTransaction(); 
       RegisterFragment RG = new RegisterFragment(); 
       FT.replace(R.id.register_fragment_id, RG); 
       FT.commit(); 
      } 
     }); 
     return v; 
    } 

    // getter for the user name 
    public String getUsername() { 
     String str = username_ET.getText().toString(); 
     return str;// returns the user name 
    }// end of getUsername() 

    private boolean passwordCorrect() { 

     // prefix the key with the user name 
     if (sharedPreferences.contains(username + "_" + KEY_UID)) { 
      String pwd = sharedPreferences.getString(username + "_" 
        + KEY_PASSWORD, ""); 
      if (pwd.equals(password_ET.getText().toString())) 
       return true; 
     } 
      return false; 

    } 
    // getter for the user name 

    private boolean userExists() { 

     // prefix the key with the user name 
     if (sharedPreferences.contains(username + "_" + KEY_UID)) { 
      String uID = sharedPreferences.getString(username + "_" + KEY_UID, 
        ""); 
      if (uID.equals(username_ET.getText().toString())) 
       return true; 
     } 

      return false; 

    }// end of userExists() 

    private boolean isValid() { 
     boolean idEmpty = false; 
     boolean passEmpty = false; 
     if ((username_ET.getText().toString().isEmpty())) { 
      idEmpty = true; 
      String text = getResources() 
        .getString(R.string.error_emptyUsername); 
      Toast.makeText(getActivity().getApplicationContext(), text, Toast.LENGTH_SHORT) 
        .show(); 
     } 
     if ((password_ET.getText().toString().isEmpty())) { 
      passEmpty = true; 
      String text = getResources() 
        .getString(R.string.error_emptyPassword); 
      Toast.makeText(getActivity().getApplicationContext(), text, Toast.LENGTH_SHORT) 
        .show(); 
     } 
     return !(idEmpty | passEmpty); 
    }// end of isValid() 

} 
+0

Haben Sie Ihre SP-Datei im Android Device Monitor überprüft? –

+0

Sie vermischen Ihre Schlüssel zwischen '" userName "+" _ "+ KEY_UID' und' "userName" 'und dasselbe für Kennwort mit' KEY_PASSWORD' –

Antwort

1

Sie einen anderen Schlüssel unter Verwendung von Daten in LoginFragment zu bekommen. dh Sie versuchen, auf eine Einstellung zuzugreifen, die nicht existiert. Ändern Sie den Code wie unten

LoginFragment:

private boolean userExists() { 

    String uID = sharedPreferences.getString("userName" + "_" + KEY_UID, ""); 

    return (uID.equals(username_ET.getText().toString())) 

} 

ändern es für Passwort als auch.

Verwandte Themen