如何在Android的Fragment中使用共享首选项?

4

我有一个碎片,想要将Facebook id存储在共享偏好中。我无法在获取偏好函数中写入private模式。同时,我希望能够在另一个碎片中访问这个共享偏好。我该怎么做?

以下是我的代码...

Session.openActiveSession(getActivity(), true, new Session.StatusCallback()
{
    @Override
    public void call(Session session,
                     SessionState state,
                     Exception exception) {

        if (session.isOpened()) {
            Request.executeMeRequestAsync(session,new Request.GraphUserCallback() {

                @Override
                public void onCompleted(GraphUser user, Response response) {

                    if (user != null) {
                        t = (TextView)rootView.findViewById(R.id.textView2);
                        p = (ProfilePictureView)rootView.findViewById(R.id.profilePictureView1);
                        p.setProfileId(user.getId());
                        s = user.getName();
                        t.setText(s);
                        s1 = user.getId();

                        private void SavePreferences(String key,String value)
                        {
                            SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
                            SharedPreferences.Editor editor = sharedPreferences.edit();
                            editor.putString(key, value);
                            editor.commit();
                        }

2
请尝试使用Context.MODE_PRIVATE - Andrew T.
使用 PreferenceManager.getSharedPreferences(context)…… - Ranjit
请修正您代码的格式 -(提示:无水平滚动条等) - Mr_and_Mrs_D
6个回答

17

Fragment中使用Shared Preferences,请见下文。

首先,写入SharedPreferences

SharedPreferences pref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor edt = pref.edit();
edt.putString("facebook_id", id);
edt.commit();

这里的id是包含Facebook ID的字符串,0表示私人模式。

其次,要在另一个片段中读取存储在SharedPreference中的Facebook ID:

SharedPreferences pref = getActivity().getPreferences(Context.MODE_PRIVATE);
String id = pref.getString("facebook_id", "empty");

如果 SharedPreference 中的 facebook_idnull,则默认返回空值。


3
您可以像这样操作:
editor = getActivity().getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE).edit();
                        editor.putString("yourtextvalueKey", test);
                        editor.commit();

并获取

prefs = getActivity().getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE);
        text = prefs.getString("yourtextvalueKey", null);

2
  • Create a separate session class:

    public class Session {
    private static String PREF_NAME = "Memory";
    private static String FBID = "FBID ";
    public static boolean saveSessionId(String FBID , Context context) {
    Editor editor = context.getSharedPreferences(PREF_NAME, 0).edit();
    editor.putString(FBID , FBID);
    return editor.commit();
    }
    
    public static String getSessionId(Context context) {
    SharedPreferences savedSession = context.getSharedPreferences(
            PREF_NAME, 0);
    return savedSession.getString(FBID , null);
    }
    }
    

当您想保存ID时,请调用保存方法。然后,以同样的方式调用getsessionid方法来获取该ID。


2

请按照以下方式更新您的SavePreferences方法:

private static String MY_PREFS = "My_Preference";
private void SavePreferences(String key, String value) {
    SharedPreferences sharedPreferences = getActivity().getSharedPreferences(
            MY_PREFS, 0);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.apply();
}

1
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
    getSharedPrefs();
}

private void getSharedPrefs() {
    sharedpreferences = getActivity().getSharedPreferences(
            Data.MY_PREFERENCES, Context.MODE_PRIVATE);

    // check for all to be loaded here
    boolean isValid = false;

    int posImage = 0;

    if (sharedpreferences.contains(Data.COLUMN_IMAGENUMBER)) {
        posImage = sharedpreferences.getInt(Data.COLUMN_IMAGENUMBER, 0);
        if (posImage >= 0 || posImage < Data.PICS.length) {
            isValid = true;
        }
    } else {
        isValid = false;
    }
}

@Override
public void onStop() {
    super.onStop();
    Editor editor = sharedpreferences.edit();
    editor.putInt(Data.COLUMN_IMAGENUMBER, cv.currentPuzzleImagePosition);
    editor.apply();
}

lint 会提示你考虑使用 apply。 - user896033

1
尝试使用此代码。对于此“共享首选项”,这已足够,无论您是在活动中还是在“片段”中工作,它都可以正常工作。“共享首选项”不能反映或不能有效地影响活动或“片段”。
要了解更多,请单击此处

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接