Как проверить, существует ли файл SharedPreferences или нет
Я ищу Общие настройки android, и мне интересно, есть ли способ просто проверить, существует ли файл настроек.
SharedPreferences mySharedPreferences ;
mySharedPreferences=getSharedPreferences(“Name_of_your_preference”,mode);
этот приведенный выше код заставляет меня поверить, что" Name_of_Your_preferene " хранится как файл или какой-то контейнер, который будет содержать ваши предпочтения.
мне интересно, есть ли там, чтобы проверить, существует ли это или нет. Когда пользователь загружает деятельности, я хочу сохранить все настройки в файл с некоторыми значениями по умолчанию(выкл. для всех параметров). Однако я хочу сделать это, только если они собираются на страницу в первый раз.
в противном случае, если бы я делал что-то подобное каждый раз, когда страница загружается
SharedPreferences.Editor editor= mySharedPreferences.edit();
/* now store your primitive type values. In this case it is true, 1f and Hello! World */
editor.putBolean(“myBoolean”,true);
editor.putFloat(“myFloat”,1f);
editor.putString(“myString”,” Hello! World”);
Я предполагаю, что он переопределит все настройки, даже те, которые они установили.
6 ответов
SharedPreferences сохраняются в xml-файле. Вы можете найти его в /data / data/your_application_package/shared_prefs / Name_of_your_preference.в XML
чтобы проверить, существуют ли SharedPreferences 'Name_of_your_preference':
File f = new File(
"/data/data/your_application_package/shared_prefs/Name_of_your_preference.xml");
if (f.exists())
Log.d("TAG", "SharedPreferences Name_of_your_preference : exist");
else
Log.d("TAG", "Setup default preferences");
С уважением.
можно использовать contains
метод SharedPreferences
объект, чтобы проверить, существует ли один из ваших ключей предпочтений в файле. Если это возвращает false
, можно предположить, что это первый раз и заполнить параметры по умолчанию. Документация для этого метода здесь.
Я не мог найти способ проверить, существует ли файл предпочтений (он будет создан автоматически при первом получении редактора), но этот метод должен сделать трюк.
у меня не было достаточно представителей, чтобы прокомментировать сообщение natur3. Поэтому этот ответ.
@natur3: очень полезно, спасибо. Однако у меня есть небольшая проблема... с суффиксом файла. Если я определяю свое имя файла следующим образом:
private static final String FILENAME = "myPrefs";
и затем использовать:
File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + FILENAME);
f.exists () вернет false, даже если файл существует в файловой системе. Это потому, что Android добавит ".XML " суффикс автоматически при написании SharedPreferences, поэтому мне пришлось сделать ссылку на файл выглядеть так:
File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + FILENAME + ".xml");
для его работы. Не знаю, откуда у тебя такие "предположения".в XML" суффикс.
мне удалось выяснить это, просмотрев файловую систему эмулятора в Eclipse с помощью Window - >Show View - >Other... а затем выберите "проводник".
вместо жесткого кодирования пути" /data/data/ " вы можете сделать следующее:
public boolean preferenceFileExist(String fileName) {
File f = new File(getApplicationContext().getApplicationInfo().dataDir + "/shared_prefs/"
+ fileName + ".xml");
return f.exists()
}
Я сделал это таким образом, чтобы его адаптируемый imo.
File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + getPackageName()+ "_preferences.xml");
if(f.exists())
{
//do stuff`enter code here`
}
я использовал это в процессе проверки в onCreate, если предпочтения существуют или нет, и в зависимости от ответа включите кнопку, чтобы очистить настройки или нет - просто проверьте, что имя файла предпочтений в DDMS, если его не назвали вручную.
самый простой способ я нашел , мы можем проверить, существуют ли общие предпочтения встроенным кодом на android
sharePrefName.contains(String key) // as if (userData.contains("name")){Toast // Your data is already here!}
проверяет, содержит ли предпочтения предпочтение. (это абстрактный логический открытый метод)
простой и легкий :)