LoginFragmentというフラグメントがあります。このフラグメントを使用して、ユーザーはRegisterボタンをクリックして初めて登録できます。このボタンをクリックすると、RegisterFragmentという新しいフラグメントが開き、ユーザーが選択した場所に新しいユーザー名とパスワードが登録されます。私は、アプリを実行し、登録の下にあるフィールドを入力し、[OK]を選択すると、それは想定されているようにトーストに "Saved Info"と表示されます。しかし、私が登録したユーザー名とパスワードを使用してログインしようとすると、アプリケーションは情報を認識せず、ユーザー名が既に存在するかパスワードが正しくない場合にのみ表示する必要があります私の場合はそうではありません。1つのフラグメントのSharedPreferencesが別のフラグメントのログインアクティビティのデータを登録していません
私は2つの異なるフラグメントを扱っているので、SharedPreferencesはユーザー名とパスワードの値を保存しませんか?どんな助けもありがとう!
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()
}
あなたのAndroidデバイスモニタでSPファイルを確認しましたか? –
あなたは '' userName "+" _ "+ KEY_UID'と' 'userName" 'の間でキーをミックスしていますが、' KEY_PASSWORD' –