Android SharedPreferences Все переменные присвоены одному значению - PullRequest
1 голос
/ 10 января 2012

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

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

Есть ли общая причина, по которой это может произойти? Если нет, я могу отправить код.

СЛЕДУЮЩИЙ КОД ИСПОЛЬЗУЕТСЯ, ЧТОБЫ ЗАПИСАТЬ И ЧИТАТЬ ЗНАЧЕНИЯ (все, что во всех заглавных буквах, является уникальной целочисленной константой)

public void LevelUp(int gameType) {
    step++;
    SharedPreferences settings = getSharedPreferences("Steps", 0);
    SharedPreferences.Editor editor = settings.edit();
    switch (gameType) {
        case NUMBERS_SPEED:   editor.putInt("NUMBERS_SPEED",   step);
        case NUMBERS_BINARY:  editor.putInt("NUMBERS_BINARY",  step);
        case NUMBERS_SPOKEN:  editor.putInt("NUMBERS_SPOKEN",  step);
        case LISTS_WORDS:     editor.putInt("LISTS_WORDS",     step);
        case LISTS_EVENTS:    editor.putInt("LISTS_EVENTS",    step);
        case SHAPES_FACES:    editor.putInt("SHAPES_FACES",    step);
        case SHAPES_ABSTRACT: editor.putInt("SHAPES_ABSTRACT", step);
        case CARDS_SPEED:     editor.putInt("CARDS_SPEED",     step);
    }
    editor.commit();        
}

public int getStep(int gameType) {
    SharedPreferences settings = getSharedPreferences("Steps", 0);
    switch (gameType) {
        case NUMBERS_SPEED:   return settings.getInt("NUMBERS_SPEED", 1);
        case NUMBERS_BINARY:  return settings.getInt("NUMBERS_BINARY", 1);
        case NUMBERS_SPOKEN:  return settings.getInt("NUMBERS_SPOKEN", 1);
        case LISTS_WORDS:     return settings.getInt("LISTS_WORDS", 1);
        case LISTS_EVENTS:    return settings.getInt("LISTS_EVENTS", 1);
        case SHAPES_FACES:    return settings.getInt("SHAPES_FACES", 1);
        case SHAPES_ABSTRACT: return settings.getInt("SHAPES_ABSTRACT", 1);
        case CARDS_SPEED:     return settings.getInt("CARDS_SPEED", 1);
        default: return -1;
    }
}

СЛЕДУЮЩИЙ КОД РЕЗИДЕН В РАЗЛИЧНОЙ ДЕЯТЕЛЬНОСТИ:

SharedPreferences settings = getSharedPreferences("Steps", 0);
step = settings.getInt("NUMBERS_SPOKEN", 1);

1 Ответ

2 голосов
/ 10 января 2012

Вам нужны перерывы между вашими инструкциями case

switch (gameType) {
    case NUMBERS_SPEED:   editor.putInt("NUMBERS_SPEED",   step);
    break;
    case NUMBERS_BINARY:  editor.putInt("NUMBERS_BINARY",  step);
    break;

В противном случае он будет проходить через все инструкции case, поэтому им всем присваивается это значение

...