2016-01-09 5 views
-1

Так что я просто пытаюсь сохранить строку. Но каждый раз, когда я перезапускаю приложение, я получаю null для сохраненной строки:/Я на 100% уверен, что вызываю метод save и что строка не равна null, когда я ее сохраняю.Android не сохраняет sharedPrefs

public class CFUser { 

private final static String ID_KEY="myUserID"; 
private static String userID; 

public static String getUserID(Context context) { 
    if(userID==null) { 
     SharedPreferences prefs= context.getApplicationContext().getSharedPreferences(ID_KEY, 0); 
     userID=prefs.getString(ID_KEY, null); 
     } 

    return userID; 
} 
public static void setUserID(String id, Context context) { 
    userID=id; 
    Log.d("saving", id); 
    SharedPreferences prefs=context.getApplicationContext().getSharedPreferences(ID_KEY, 0); 
    prefs.edit().putString(ID_KEY, userID); 
    prefs.edit().apply(); 
} 
public static boolean isLoggedIn(Context context) { 
    return getUserID(context)!=null; 
} 

}

большое спасибо!

+0

сделать 'editor.commit();' –

+3

@MD: 'совершить()' работает так же, как 'применить()', с той разницей, что 'применить()' является асинхронной (и, следовательно, рекомендуется Это дело). –

+0

@TobiasBaumeister Полностью согласен !!! –

ответ

2

В этом коде, вы создаете два различных SharedPreferences.Editor объектов:

SharedPreferences prefs=context.getApplicationContext().getSharedPreferences(ID_KEY, 0); 
prefs.edit().putString(ID_KEY, userID); 
prefs.edit().apply(); 

Так что означает, что вы помещаете строку в Editor1, но обязывающее (несуществующие) изменения Editor2.
Вы должны сделать это таким образом:

SharedPreferences prefs=context.getApplicationContext().getSharedPreferences(ID_KEY, 0); 
SharedPreferenced.Editor edit = prefs.edit(); 
edit.putString(ID_KEY, userID); 
edit.apply(); 
+0

Хммм у вас это получилось !!! +1 up –

+0

И я читал по крайней мере 3 темы об этом, и даже не думал, что я делаю такую ​​глупую ошибку. Большое спасибо! –

0

На данный момент название всех SharedPreferences файла myUserID из-за того, как вы извлечение SharedPreferences. Вместо этого используйте следующее. Это не вызывает проблему, но я предполагаю, что вы не хотите, чтобы файл SharedPreferences в качестве ключа ID ...

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 

Затем, когда вы пишете в настройках убедитесь, что вы с помощью такой же Editor.

Editor editor = preferences.edit(); 
editor.putString(ID_KEY,userID); 
editor.apply(); 
Смежные вопросы