SharedPreferences возвращает только значение по умолчанию

Поэтому вместо создания базы данных я сохраняю данные с помощью SharedPreference.

Мой код ниже:

   SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
        editor.putInt("favid"+id, 1);
        editor.commit();
        Toast.makeText(getApplicationContext(), "Select as favorite", Toast.LENGTH_SHORT).show();

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

   strFav = new ArrayList<Integer>();

    if(strFav.size()>0)
        strFav.clear();
    SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
    for (int i = 1; i < 19; i++) {
        int favid = prefs.getInt("favid"+i, -1);
        if (favid != -1) 
        {
          strFav.add(i);
        }
    }

Во время извлечения данных я получаю все значения -1.

Может ли кто-нибудь помочь мне, почему это происходит? Я зафиксировал много записей как 1, но я все еще получаю результат -1 для всех из них.


person Panchal Amit    schedule 12.12.2012    source источник


Ответы (3)


См. документы о методе getPrefernces:

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

Итак, если вы хотите разделить настройки между действиями, вы должны использовать getSharedPreferences с указанным именем.

person Jin35    schedule 12.12.2012
comment
но Джин, я также использовал MODE_WORLD_WRITEABLE, но так это не делается :( - person Panchal Amit; 12.12.2012
comment
Если вы будете использовать эти настройки только в своем приложении, вы можете использовать MODE_PRIVATE. - person Jin35; 12.12.2012

Используете ли вы общие настройки в двух разных действиях одного приложения?

Также попробуйте указать имя настроек или используйте какой-нибудь менеджер для обработки всех настроек, все это объясняется здесь

person dilix    schedule 12.12.2012
comment
большое спасибо dilix, выполнив SharedPreferences prefs = getSharedPreferences(abc, 0); проблема решена - person Panchal Amit; 12.12.2012

editor.putInt("favid"+id, 1);

как насчет того, что id равен 0? здесь вы читаете, начиная с 1

 for (int i = 1; i < 19; i++) {
person Blackbelt    schedule 12.12.2012
comment
вы уверены, что editor.putInt(favid+id, 1); id vaules равен != 0, когда вы выполняете put? - person Blackbelt; 12.12.2012
comment
это не имеет смысла для меня. - person Blackbelt; 12.12.2012