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()
}
Haben Sie Ihre SP-Datei im Android Device Monitor überprüft? –
Sie vermischen Ihre Schlüssel zwischen '" userName "+" _ "+ KEY_UID' und' "userName" 'und dasselbe für Kennwort mit' KEY_PASSWORD' –