Как указано в документации:
Параметры
ключ Имя предпочтения для получения.defValue Значение, которое возвращается, если этого предпочтения не существует.
Возвращает значение предпочтения, если оно существует, или defValue.Выдает ClassCastException, если есть предпочтение с этим именем, которое не является целым числом.
Если верить документации, то предпочтения вообще не существует, вы можете проверить это, сделав ваш getInt
значения, отличающиеся от ваших значений в xml, если он возвращает ваши getInt
значения, вы знаете, что предпочтения не существуют.
В приведенном выше случае ваши предпочтения должны быть удалены или не были установленыв первую очередь, это выглядит довольно маловероятно.
Другая вещь, на которую вы могли бы обратить внимание, это то, что вы звоните commit
, когда обновляете свои предпочтения, или ваши предпочтения обновляются.
Вы также можете попробовать поиграть с режимами, когда настраиваете свои предпочтения, попробуйте MODE_MULTI_PROCESS
, так как приемник широкого вещания - это отдельный процесс, и, вероятно, вы устанавливаете предпочтения в другом месте, а также попробуйте 'MODE_WORLD_WRITEABLE'.
ОБНОВЛЕНИЕ из комментариев
Во-первых, код немного сбивает с толку, я думаю, потому что я не могуувидеть все, но вы не можете скопировать весь проект здесь, поэтому мне придется с этим смириться.
Вот как я понимаю проблему: вы устанавливаете эти значения по своему усмотрению, и вы можете позвонить getInt
в этих предпочтениях в какой-то момент, и это правильно, затем после определенного события (возможно, вызванного переходом в режим ожидания) вы снова вызываете getInt
, и предпочтение возвращается к значению по умолчанию, как указано в preference.xml, а не по умолчаниюзначение, переданное при вызове getInt
(поскольку это предполагает, что предпочтение не существует).
Я заметил, что вы копируете значения в эти переменные ExampleWidgetProvider. *, уверены ли вы, что это неправильные значениявы извлекаете данные как настройки, и те значения, которые существуют в настройках, никогда не устанавливаются правильно.Я не вижу смысла в наличии этих переменных, поскольку вы обязаны синхронизировать их, когда вы меняете одну из них.Если они являются частью работы, то их следует удалить, чтобы они не обернулись исходной проблемой.
Как я уверен, вы знаете;если вы перезапустите приложение, настройки должны быть такими же, как и до перезапуска, поскольку значения параметров сохраняются (при условии, что они настроены правильно) и, как сказано в документации:
android: defaultValue Значение по умолчанию для предпочтения, которое будет установлено, если постоянство отключено или постоянство включено, и предпочтение не найдено в постоянном хранилище.
Что говорит о том, что предпочтениене возвращается к исходному значению, а скорее не существует по какой-либо причине (если это конкретное значение по умолчанию появляется снова).
Существует метод setDefaultValues(Context context, int resId, boolean readAgain=true)
, но вы сказали, что нет 'Я так называю.Так что кажется маловероятным, что предпочтение сбрасывается, а скорее оно удаляется или никогда не существовало.