2010-12-11 6 views
0

私はアンドロイド用のハングマンゲームのためのエンドゲームアクティビティを作成しようとしていますが、文字列以外の値をコミットする際に問題があります。ここでbooleanとintをsharedPrefsに保存する際に問題が発生しました

は私の主な活動です:

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

しかし、文字列だけが正しくコミットされています。私はブール値がfalseのデフォルト値に戻ると思います。

誰かが私にこれについていくつか光を当てるのに役立つでしょうか?

答えて

3

データをあるアクティビティから別のアクティビティに移動する場合は、そのデータをインテントに添付します。 共有メモリに書き込むことは、電話機のストレージにアクセスすることを意味し、それは実際には遅いです。

あなたはそれがこの方法で行うことができます:あなたはどうなるEndActivityで

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

を:

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

うわーそれは簡単でした。迅速な対応に感謝します。 – SQDK

関連する問題