Служба не сохраняет SharedPreference для основной активности? - PullRequest
1 голос
/ 29 сентября 2011

Я использую сервис для загрузки и получения списка URL-адресов и помещаю их в общий доступ.

С этим ..

SharedPreference images_article = this.getSharedPreferences("images_articles", MODE_WORLD_READABLE);
editor.putString("article2", urlImage2);
editor.putString("article3", urlImage2);
editor.commit();

Затем в своей основной деятельности я выбираю URL из предпочтения.

SharedPreference images_article = this.getSharedPreferences("images_articles",  MODE_WORLD_READABLE);
urlImage2 = images_article.getString("article2", "NO ARTICLE AVAILABLE");
urlImage3 = images_article.getString("article3", "NO ARTICLE URL AVAILABLE");

Единственная проблема заключается в том, что по какой-то причине она не входит в общие предпочтения, потому что основное действие - загрузка старых URL-адресов, которые теперь изменились. Но в Сервисе я регистрирую получение URL, и они обновляются, но по какой-то причине в основном действии он все еще загружает старый. и я извлекаю их из того же предпочтения.

Есть ли что-то, что я пропускаю или лучший способ сделать это? Любая помощь будет отличной !!

Ответы [ 3 ]

4 голосов
/ 29 сентября 2011

Я столкнулся с похожей проблемой с моими SharedPreferences между моей деятельностью и службой. В итоге я не использовал значение по умолчанию и использовал свой собственный набор имен файлов

в деятельности и услугах, которые я установил

private static final String PREFERENCE_NAME = "MyPreferenceFileName";

Затем, чтобы получить значения:

SharedPreferences pref = getSharedPreferences(PREFERENCE_NAME, Activity.MODE_PRIVATE);
pref_checked = pref.getBoolean("checked", true);

и установить значения:

SharedPreferences pref = getSharedPreferences(PREFERENCE_NAME, Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean("checked", value);
editor.commit();

Это позволило мне без каких-либо проблем использовать одинаковую логику получения и размещения как в Службе, так и в Деятельности. Я надеюсь, что это помогло.

2 голосов
/ 29 сентября 2011

Это может происходить из-за различных контекстов, к которым вы обращаетесь.Я не совсем уверен, но вы можете попробовать это:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sp.edit();

Используйте этот код, когда вы пытаетесь получить доступ к SharedPreferences, то есть как с Service, так и с Activity.Это может решить вашу проблему.

1 голос
/ 17 марта 2015

Использование этого в классах Activity и Service, кажется, работает для меня, так как теперь он должен использовать один и тот же контекст для доступа к приложению SharedPreferences:

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
...