2015-06-29 4 views
3

Здесь я создаю SharedPreferences, если я не ошибаюсь, я использую этот код:SharedPreferences Long значение

SharedPreferences sp = getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sp.edit(); 
editor.putLong("ExactTime", minutesToMilliseconds(NumberPicker2.getValue())); 
editor.commit(); 

Что я делаю, я получаю value от NumberPicker и я хочу сохраните этот value и как только пользователь перезапустит APP или даже перезагрузит устройство (я не знаю, делает ли это SharedPreferences ...), когда пользователь открывает APP, он все еще тот же номер, выбранный из NumberPicker.

И я хочу использовать его в классе , который расширяет диапазон Service. То, что я попытался это:

SharedPreferences sp = this.getSharedPreferences("ExactTime", Context.MODE_PRIVATE); 
WifiTimeSearch = sp.getLong("ExactTime", 0); 

Вот где я потерял ... Я читал, что это «0» означает, что значение по умолчанию, но я хочу использовать то же самое значение, что я хранимую на SharedPreferences ... И когда я пытаюсь использовать это значение Long, значение равно «0».

Что я делаю неправильно?

ответ

3

Вы читать и писать в разные файлы SharedPreference.

Также, используя getPreferences(), вы пишете в SharedPreferences, которые являются локальными для этой деятельности.

Из исходного кода:

/** 
    * Retrieve a {@link SharedPreferences} object for accessing preferences 
    * that are private to this activity. This simply calls the underlying 
    * {@link #getSharedPreferences(String, int)} method by passing in this activity's 
    * class name as the preferences name. 
    * 
    * @param mode Operating mode. Use {@link #MODE_PRIVATE} for the default 
    *    operation, {@link #MODE_WORLD_READABLE} and 
    *    {@link #MODE_WORLD_WRITEABLE} to control permissions. 
    * 
    * @return Returns the single SharedPreferences instance that can be used 
    *   to retrieve and modify the preference values. 
    */ 
    public SharedPreferences getPreferences(int mode) { 
     return getSharedPreferences(getLocalClassName(), mode); 
    } 

Чтобы заставить его работать, просто использовать SharedPreferences по умолчанию для вашего приложения:

Writing:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor = sp.edit(); 
    editor.putLong("ExactTime", minutesToMilliseconds(NumberPicker2.getValue())); 
    editor.commit(); 

Reading:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 
    WifiTimeSearch = sp.getLong("ExactTime", 0); 

Нет что до тех пор, пока вы находитесь в Управлении или Службе, вы можете использовать в качестве Контекста.

+1

Работали как шарм Даниэль, спасибо большое :) Я отсутствовал 'PreferenceManager'. –

1

Я думаю, проблема вы передаете имя предпочтения файла как «ExactTime» при чтении из предпочтений, экономя при этом вы не указываете какой-либо

Попробуйте

SharedPreferences sp = getSharedPreferences(null,Context.MODE_PRIVATE); 
WifiTimeSearch = sp.getLong("ExactTime", 0); 
+0

getSharedPreferences() требует 'String' и' int', если я не ошибаюсь ... Проверьте это http://developer.android.com/reference/android/content/Context.html#getSharedPreferences(java .lang.String, int) –

+0

вы можете передать null как первый параметр .. editted my answer – Akhil

+0

@Akhil Но при получении значения он использует ключ «ExactTime», а затем он работает? –

2

В SharedPreferences, первый Параметр - это ключ, а второй параметр - MODE. Таким образом, до COMMIT, а также до retrieve значения мы должны использовать тот же ключ.

попробовать этот код совершить:

SharedPreferences sp = getSharedPreferences("ExactTime",Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sp.edit(); 
editor.putLong("ExactTime", minutesToMilliseconds(NumberPicker2.getValue())); 
editor.commit(); 
Смежные вопросы