Не можете использовать SharedPreferences в методе, который не вызывается в onCreate ()? - PullRequest
1 голос
/ 12 мая 2011

В моем приложении я пытаюсь сохранить ArrayList of Strings.У меня есть Избранное деятельности, которая имеет метод add().Этот метод вызывается в другом Activity для добавления чего-либо в ArrayList.Я хочу, чтобы каждый раз, когда что-то добавлялось, он сначала получает все значения, которые я сохранил в SharedPreferences, проверяет, не существует ли это значение, а если нет, добавляет его в ArrayList.Наконец, я хочу снова сохранить все значения в SharedPreferences.Когда вызывается Activity Favorites, он показывает список со всеми избранными (получает каждое значение в базе данных и все такое).

Итак, я создал метод, но onCreate() никогда не вызывается, когдаэлемент добавлен в ArrayList, я не могу создать экземпляр моего SharedPreferences.Есть кто-нибудь, кто может дать мне несколько советов, чтобы заставить это работать?

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

Кроме того, код Iиспользуется:

public void add(String v, String k){
    prefs = PreferenceManager.getDefaultSharedPreferences(this);
    int countvaca = prefs.getInt("vacacount", 0);
    int countkantoor = prefs.getInt("kantoorcount", 0);

    for(int i = 0; i <countvaca; i++){
        vaca.add(prefs.getString("Vaca"+i, null));
    }
    for(int j = 0; j <countkantoor; j++){
        kantoor.add(prefs.getString("Kantoor"+j, null));
    }

    boolean blnFound = vaca.contains(v);
    System.out.println("Does arrayList contain vacature ? " + blnFound);
    if(!blnFound){
        vaca.add(v);
        kantoor.add(k);
    }

    Editor edit = prefs.edit();
    countvaca = vaca.size();
    countkantoor = kantoor.size();
    edit.putInt("Vacaturelijstgrootte", countvaca);
    edit.putInt("Kantoorlijstgrootte", countkantoor);
    for(int a = 0; a<countvaca; a++){
         edit.putString("Vaca"+a, vaca.get(a));
    }
    for(int b = 0; b< countkantoor; b++){
        edit.putString("Kantoor"+b, kantoor.get(b));
    }
    edit.commit();


}

1 Ответ

0 голосов
/ 12 мая 2011

Если onCreate никогда не вызывается, то ваша деятельность никогда не запускается, поэтому «this» в

prefs = PreferenceManager.getDefaultSharedPreferences(this);

не относится к правильно инициализированной активности.

Либо вам следует начатьваша активность, которая содержит ваш метод "add" (который автоматически вызывает метод onCreate), или вы можете передать ссылку на текущую активную активность в метод add, то есть что-то вроде этого:

public void add(String v, String k, Activity a){
     prefs = PreferenceManager.getDefaultSharedPreferences(a);

Однако,не считается хорошим стилем программирования прямой вызов методов из одного действия в другое.Лучше всего создать отдельный класс, содержащий код, который объединяет эти два действия.

...