Java 在片段中的.commit()或.apply()之后未保存SharedReferences
Framgent类Java 在片段中的.commit()或.apply()之后未保存SharedReferences,java,android,sharedpreferences,Java,Android,Sharedpreferences,Framgent类 public class FragmentSignUp1 extends Fragment { private EditText editTextEmail; private EditText editTextUsername; UserSignUpPreferences userSignUpPreferences; @Override public View onCreateView(LayoutInflater inflate
public class FragmentSignUp1 extends Fragment {
private EditText editTextEmail;
private EditText editTextUsername;
UserSignUpPreferences userSignUpPreferences;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_signup1, container, false);
userSignUpPreferences = new UserSignUpPreferences(this.getActivity());
// Creating references to Views
editTextEmail = (EditText) view.findViewById(R.id.editTextEmail);
editTextUsername = (EditText) view.findViewById(R.id.editTextUsername);
// Setting custom font on elements
return view;
}
// Restore data if activity has been destroyed
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState == null) {
} else {
editTextEmail.setText(savedInstanceState.getString("email"));
editTextUsername.setText(savedInstanceState.getString("username"));
}
}
// Save data if activity is destroyed
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("email", editTextEmail.getText().toString());
outState.putString("username", editTextUsername.getText().toString());
}
// Save data if activity get paused
@Override
public void onPause() {
super.onPause();
Log.d("fragment_signup1", editTextEmail.getText().toString());
userSignUpPreferences.editor.putString(editTextEmail.getText().toString(), userSignUpPreferences.USER_EMAIL)
.putString(editTextUsername.getText().toString(), userSignUpPreferences.USER_USERNAME)
.apply();
Log.d("fragment_signup1", userSignUpPreferences.preferences.getString(userSignUpPreferences.USER_EMAIL, "null"));
}
// Retrieve data when activity is resumed
@Override
public void onResume() {
super.onResume();
Log.d("fragment_signup1", userSignUpPreferences.preferences.getString(userSignUpPreferences.USER_EMAIL, "null"));
editTextEmail.setText(userSignUpPreferences.preferences.getString(userSignUpPreferences.USER_EMAIL, "2"));
editTextUsername.setText(userSignUpPreferences.preferences.getString(userSignUpPreferences.USER_USERNAME, ""));
}
}
用户首选项类
public class UserPreferences {
public SharedPreferences.Editor editor;
public SharedPreferences preferences;
public UserPreferences(Context context, String prefFileName) {
preferences = context.getSharedPreferences(prefFileName, Context.MODE_PRIVATE);
editor = preferences.edit();
}
}
public class UserSignUpPreferences extends UserPreferences{
private final static String USER_SEARCH_SETTINGS = "UserSearchSettingsPrefFile";
public final String USER_EMAIL = "email";
public final String USER_USERNAME = "username";
public UserSignUpPreferences(Context context) {
super(context, USER_SEARCH_SETTINGS);
}
}
UserSignupReferences类
public class UserPreferences {
public SharedPreferences.Editor editor;
public SharedPreferences preferences;
public UserPreferences(Context context, String prefFileName) {
preferences = context.getSharedPreferences(prefFileName, Context.MODE_PRIVATE);
editor = preferences.edit();
}
}
public class UserSignUpPreferences extends UserPreferences{
private final static String USER_SEARCH_SETTINGS = "UserSearchSettingsPrefFile";
public final String USER_EMAIL = "email";
public final String USER_USERNAME = "username";
public UserSignUpPreferences(Context context) {
super(context, USER_SEARCH_SETTINGS);
}
}
所以问题是。。。它不保存当前值。为什么?在应用值时,参数是反向的。 的第一个参数是用于查找的键,第二个参数是与键关联的值 在这里反转它们,它应该可以工作:
// Save data if activity get paused
@Override
public void onPause() {
super.onPause();
Log.d("fragment_signup1", editTextEmail.getText().toString());
userSignUpPreferences.editor.putString(userSignUpPreferences.USER_EMAIL, editTextEmail.getText().toString())
.putString(userSignUpPreferences.USER_USERNAME, editTextUsername.getText().toString())
.apply();
Log.d("fragment_signup1", userSignUpPreferences.preferences.getString(userSignUpPreferences.USER_EMAIL, "null"));
}
@米肯。在fragment onPause()方法中有.apply()