2014-02-12 67 views
4

我有一个片段,我想存储Facebook的共享偏好。我无法在获取首选项功能中编写私有模式。而且我想在另一个片段中访问这个共享偏好。我该怎么做?如何在Android上的片段中使用共享首选项?

这里是我的代码...

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'代替。 –

+0

使用preferencemanager.getsharedpreference(上下文)... – Ranjit

+0

更正您的代码的格式 - (提示:没有水平滚动条等) –

回答

14

使用Shared Preferences一个Fragment内;见下文。

首先写在SharedPreferences

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

这里ID是一个包含Facebook的ID,你已经得到了串,0表示private_mode。

其次,读取另一个Fragment存储在SharedPreference Facebook的ID:

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

空的。这里是如果facebook_id里面SharedPreference空返回的默认值。

2
  • 创建一个单独的会话类:

    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(); 
} 
+0

lint会告诉你考虑使用apply – user896033

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); 
1

与此代码尝试。这对于此Shared preference就足够了,它可以用于活动或FragmentShared preference无法反映或无法生效活动或Fragment

详细点击here