Возникают проблемы с сохранением логических и int в sharedPrefs - PullRequest
0 голосов
/ 11 декабря 2010

Я пытаюсь создать эндшпильную игру для моей игры Hangman для Android, и у меня возникают некоторые проблемы при фиксации значений ДРУГИЕ, чем строки.

Вот мое основное занятие:

package com.assignment.hangman;
import android.app.Activity;


public class HangmanActivity extends Activity {
    public static final String GAME_PREFERENCES = "Game Preferences";
    public static final String GAME_LOGIC = "Game Logic";
    public static final String GAME_LOGIC_GUESS = "Guessed letter";
    public static final String GAME_LOGIC_SCORE_STRING = "Unknow score";
    public static final boolean GAME_LOGIC_WIN_LOOSE = false;
}

Я получаю sharedprefs следующим образом:

mGameSettings = getSharedPreferences("GAME_PREFERENCES", Context.MODE_PRIVATE);

И вот, когда что-то идет не так при фиксации изменений в редакторе:

public void finishGame() {
        //Commit different game variables so they can be used in the end game activity  
        Editor editor = mGameSettings.edit();
        editor.putString(GAME_LOGIC_SCORE_STRING, (tries + " of " + numberOfLives + " used"));
        if (tries != numberOfLives){
            editor.putBoolean("GAME_LOGIC_WIN_LOOSE", true);
        }
        editor.commit();
        // Launch end game Activity
        startActivity(new Intent(HangmanGameActivity.this, HangmanEndActivity.class));
    }

И после изменения активности я заново получаю значениякак это:

        if (mGameSettings.contains("GAME_LOGIC_WIN_LOOSE")) {
        Log.i(GAME_DEBUG, "Succes");
        boolean winLoose = mGameSettings.getBoolean("GAME_LOGIC_WIN_LOOSE", false);
        if (winLoose) {
            winLooseView.setText(R.string.you_win);
        } else {
            winLooseView.setText(R.string.you_loose);
    }
    }

Но почему-то только String совершается правильно.Я предполагаю, что логическое значение возвращается к значению по умолчанию false.

Может ли кто-нибудь помочь мне пролить свет на это?

1 Ответ

3 голосов
/ 11 декабря 2010

Если вы хотите переместить данные только из одного занятия в другое, я бы прикрепил их к намерению.Запись его в общую память означает доступ к памяти телефона, и это очень медленно.

Вы могли бы сделать это следующим образом:

Intent intent = new Intent(HangmanGameActivity.this, HangmanEndActivity.class);
intent.putExtra(GAME_LOGIC_SCORE_STRING, tries + " of " + numberOfLives + " used"):
intent.putExtra("GAME_LOGIC_WIN_LOOSE", true);  
startActivity(intent);

В EndActivity вы должны сделать:

Intent intent = getIntent();
String gameString = intent.getStringExtra(GAME_LOGIC_SCORE_STRING, "default value");
boolean win = intent.getBooleanExtra(GAME_LOGIC_WIN_LOOSE, false);
...