私は再戦をすることができる2人のゲームを作っています。私はまた、各プレイヤーの得点を記録しています。これは私の再戦コードは次のようになります:アプリを再起動した後にスコアを記憶する方法は?
public void rematch(View view) {
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(i);
}
上記のコードは、ユーザーが再戦ボタンをクリックしたときに呼び出されます。基本的にはアプリケーションを再起動するのは、私が持っているすべての変数をリセットするよりも簡単だからです。私は共有環境設定を使用しています
@Override
protected void onStop() {
super.onStop();
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(SCORES_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("scoreOne", p1Score);
editor.putInt("scoreTwo", p2Score);
editor.commit();
}
:とにかく、スコアを追跡するために、私はこのようなonStop()
メソッドをオーバーライドしています。その後、私のonCreateメソッドでは、私はこのようにこれらの共有設定を取得する:
// Remember scores from previous games
SharedPreferences settings = getSharedPreferences(SCORES_NAME, 0);
p1Score = settings.getInt("scoreOne", 0);
p2Score = settings.getInt("scoreTwo", 0);
updateScores();
SCORES_NAME
は、このすべてが動作していない public static final String SCORES_NAME = "MyScores";
です。ゲームが再開した後の私の得点は常に0に戻っています。私はrematch()
にインテントを追加しようと考えていましたが、私のonCreate()
メソッドでこのインテントにアクセスする方法がわかりません。どんな助けでも大歓迎です!
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
savedInstanceState.putInt("scoreOne", p1Score);
savedInstanceState.putInt("scoreTwo", p2Score);
// etc.
}
バンドルは、基本的にNVP(「名前と値のペアを」保存する方法です:あなたはonSaveInstanceState(Bundle savedInstanceState)
を無効にし、このようなBundle
パラメータに変更するアプリケーションの状態の値を記述する必要が
SharedPreferencesの変数に以前に保存した値があることを確認しますか? – MyMy
@Mayk私はこれを行う方法がわかりません。どうぞあなたは詳しく教えていただけますか? – Zelda
以前にSharedPreferencesに保存した値を尋ねたときに、onCreateでアプリケーションを再起動した後に返される値を出力するように指示しました。例:System.out.println(p1Score);問題がどこから来るのかを知ろうとする。 – MyMy