Booleanとintを共有担当者に節約するのに問題があります
-
08-10-2019 - |
質問
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);
}
}
しかし、どういうわけか、文字列だけが正しくコミットされています。ブール値はfalseのデフォルト値に戻ると思います。
誰かが私がこれに光を当てるのを手伝ってくれますか?
解決
データをあるアクティビティから別のアクティビティに移動するだけの場合、意図に添付します。共有メモリに書くことは、電話ストレージにアクセスすることを意味し、それは本当に遅いです。
あなたはそれがこのようにすることができます:
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);
所属していません StackOverflow