Singleton SharedPreference Android

#java #android

#java #Android

Вопрос:

У меня есть два фрагмента CommentsFragment , и RegistrationFragment CommentsFragment я сохраняю свой предпочтительный 3-строковый тип данных.

Вот мой фрагмент комментария

 SingleTon singleTon;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_comment, container, false);
    ButterKnife.bind(this, view);
    Bundle args = getArguments();
    singleTon  = SingleTon.getInstance();
    singleTon.setContext(getContext());
    user = singleTon.getUser();
    id = args.getInt("id");
    slug = args.getString("slug");
    return view;
}
  

Здесь я сохраняю три моих строковых данных в моем CommentsFragment.

     @Override
    public void onSaveClicked(User user) {
        singleTon.setUser(user);
    }
  

Вот мой одноэлементный файл.

 public class SingleTon {

private SharedPreferences preferences;

private static SingleTon singleTon;

public static SingleTon getInstance() {

    if (singleTon == null) {
        singleTon = new SingleTon();
    }

    return singleTon;

}

public void setContext(Context context) {
    preferences = context.getSharedPreferences("preferences", Context.MODE_PRIVATE);
}

public void setUser(User user) {
    setMail(user.getMail());
    setName(user.getName());
    setWeb(user.getWebSite());
}

public User getUser() {
    User user = new User();
    user.setWebSite(getWeb());
    user.setName(getName());
    user.setMail(getMail());
    return user;
}

private void setMail(String mail) {
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("mail", mail);
    editor.apply();
}

private void setName(String name) {
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("name", name);
    editor.apply();

}

private void setWeb(String web) {
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("web", web);
    editor.apply();
}

private String getName() {
    return preferences.getString("name", null);
}

private String getWeb() {
    return preferences.getString("web", null);

}

private String getMail() {
    return preferences.getString("mail",null);
}
  

}

В моем RegistrationFragment я хочу представить все мои три строковые данные.Вот как я это реализовал.

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_registration, container, false);
    singleTon = SingleTon.getInstance();
    singleTon.setContext(getContext());
    user = singleTon.getUser();
    setEditText();

    return view;
}

private void setEditText() {
    if (user.getWebSite() != null) {
        edit_web.setText(user.getWebSite());
    }
    if (user.getName() != null) {
        edit_name.setText(user.getName());
    }
    if (user.getMail() != null) {
        edit_mail.setText(user.getMail());
    }
}
  

Мой вопрос в том, что когда я сохраняю три даты в своем CommentsFragment и перехожу к RegistrationFragment в своих EditTexts, мои данные не отображаются, но если я закрою свое приложение и запущу его, то в моем RegistrationFragment будут показаны все три значения данных. Как это можно решить, пожалуйста, помогите мне?

Ответ №1:

Попробуйте использовать editor.commit(); вместо editor.apply();

Также есть условие для проверки, не является ли user null . перед строкой ниже.

 if (user.getWebSite() != null) {