Как проверить, существует ли файл SharedPreferences или нет - PullRequest
14 голосов
/ 06 августа 2011

Я ищу общий доступ к настройкам 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 ]

21 голосов
/ 06 августа 2011

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");

Regards.

18 голосов
/ 06 августа 2011

Вы можете использовать метод contains для объекта SharedPreferences, чтобы проверить, существует ли в файле один из ваших предпочтительных ключей.Если это возвращает false, вы можете предположить, что это в первый раз и заполнить настройки по умолчанию.Документация для этого метода: здесь .

Я не смог найти какой-либо способ проверить, существует ли уже файл настроек (он будет создан автоматически при первом получении редактора),но этот метод должен сделать свое дело.

4 голосов
/ 09 декабря 2013

У меня не было достаточно представителей, чтобы прокомментировать пост 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");

, чтобы она работала.Я не знаю, откуда у вас ваш суффикс "_preferences.xml".

Мне удалось выяснить это, просматривая файловую систему эмулятора в Eclipse, используя Window-> Show View-> Other ... и затемвыберите «Проводник».

2 голосов
/ 20 августа 2016

Вместо жесткого кодирования пути "/ data / data /" вы можете сделать это:

public boolean preferenceFileExist(String fileName) {
    File f = new File(getApplicationContext().getApplicationInfo().dataDir + "/shared_prefs/"
            + fileName + ".xml");
    return f.exists()
}
1 голос
/ 26 мая 2013

Я сделал это таким образом, чтобы его можно было адаптировать.

File f = new File("/data/data/" + getPackageName() +  "/shared_prefs/" + getPackageName()+ "_preferences.xml");

if(f.exists())
{ 
     //do stuff`enter code here`
}

Я использовал это в процессе проверки в onCreate, если настройки существуют или нет, и в зависимости от ответа включите кнопку, чтобы очистить настройки или нет - просто проверьте, какое имя у вашего файла настроек.в DDMS, если имя не указано вручную.

0 голосов
/ 27 марта 2017

Самый простой способ, который я нашел, мы можем проверить, существуют ли общие предпочтения с помощью встроенного кода на Android

 sharePrefName.contains(String key) // as if (userData.contains("name")){Toast // Your data is already here!}

Проверяет, содержит ли предпочтение предпочтение. (это абстрактный логический публичный метод)

Просто и легко:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...