7. 結果の表示とトータルスコアの保存
更新情報(2023年9月)
解説を Android Studio Giraffe | 2022.3.1 に更新しました。
動画をこちらのページに移動しました。
目次
はじめに
今回は結果画面にクイズの正解数を表示して、トータルスコアを保存できるようにしていきます。
ここでは intent(インテント)と SharedPreferences(シェアードプレファレンシズ)というものを使います。
どちらもアプリ開発でよく使われるので、いつでもサクッと実装できるように覚えておくと便利だと思います。
それでは、はじめていきましょう!
解説
1. 正解数をResultActivity.javaに渡す
まずは正解数を結果画面で表示できるように、rightAnswerCount(正解数)を MainActivity(クイズ画面)から ResultActivity(結果画面)へ渡します。
MainActivity.java を開いて、6~8行目を追加してください。
必要なimport
追加される import は1つです。
Intent(インテント)の使い方
新しくアクティビティを開くときは Intent(インテント)を使います。
startActivity(intent);
context(コンテキスト)には現在のアクティビティ、cls には 表示するアクティビティを Class オブジェクトで書きます。
次に、作成したインテントを startActivity に渡すことでアクティビティを表示することができます。
今回は rightAnswerCount(正解数)を ResultActivity(結果画面)で使いたいので、startActivity の前にこの1行を書いています。
putExtra(取り出す時に使うキー, 渡したい値) と書くことで、遷移先のアクティビティに値を渡すことができます。
キーは String 型(文字列)ですが、値には String, int, float などをセットすることができます。
2. 正解数の表示
次に結果画面に正解数を表示します。
ResultActivity.java を開いて、6~8行目を追加してください。
7行目:正解数を受け取る
先ほど値を渡す時に使ったキー RIGHT_ANSWER_COUNT を使って正解数を受け取ります。
正解数は int 型だったので、getIntExtra メソッドを使います。
書き方は getIntExtra(キー, 値が取得できなかった場合の値) となります。
8行目:正解数を表示
resultLabel に正解数を「3 / 5」と表示します。
クイズ画面の countLabel と同じように %d の部分に数値 score を入れています。
3. トータルスコアの表示・保存
次に累計正解数をトータルスコアとして表示・保存してみます。
アプリにデータを保存するには
- SharedPreferences
- SQLiteデータベース
- テキストファイル
を使う方法がありますが、今回は一番手軽に使える SharedPreferences を紹介します。
以下のコードを追加します。
見やすいように順番を変えてコメントも書きましたが、新たに追加したコードは 7・13・14・17・21・24~26 行目です。
必要な import
追加されるimportは1つです。
13行目:SharedPreferences の準備
まずは SharedPreferences を使うための準備です。
getPreferences(モード)のように書きます。
MODE_PRIVATE は「このアプリからのみ」アクセスできるモードです。
モードにはいくつか種類がありましたが、現在推奨されていないものが多いので MODE_PRIVATE を使うと覚えておけば問題ありません。
補足
getPreference メソッドで保存した値は、1つのアクティビティでのみ有効になります。
ですので、トータルスコアはクイズ画面(MainActivity)で呼び出すことはできません。
複数のアクティビティで保存した値を扱う場合は getSharedPreferences("ファイル名", モード); と書きます。
14行目:トータルスコアを取り出す
getInt(キー, データが無かった場合の数値) のように書きます。
初めてクイズに挑戦した時は、まだトータルスコアが保存されていないので 0 が返ってきます。
21行目:トータルスコアを表示する
SharedPreferences から取得したトータルスコアに今回のクイズの正解数を加算して(17行目)、最新のトータルスコアを表示します。
24行目~:トータルスコアを保存する
editor.putInt("TOTAL_SCORE", totalScore);
editor.apply();
putInt(キー, 保存する値)のようにデータをセットします。
注意して頂きたいのが、読み出し時・書き込み時のキーを必ず合わせることです。
書き込み時 editor.putInt("TOTAL_SCORE", totalScore);
ここが一致しないと保存できても読み出せなくなってしまうのでお気をつけください。
最後にapply()で保存します。
SharedPreferences 使い方のヒント
今回はトータルスコアを保存しましたが、ハイスコアやユーザー名、最後にクイズに挑戦した日など色々な使い方ができると思います。
トータルスコア以外にもデータを保存したい場合は、キーを変えることで複数のデータを保存することもできます。
例えば、トータルスコアに加えて、このようにユーザー名を読み書きすることもできます。
書き込み時 editor.putString("KEY_NAME", userName);
ぜひ工夫して使ってみてください。
次に行うこと
これで「もどるボタン」以外の結果画面は完成です!
次はクイズのカテゴリを選択できるスタート画面を作っていきます。
「もどるボタン」はスタート画面を作ってから実装するので、もう少しお待ちください。
ここまでのコード
MainActivity.java
ResultActivity.java
12 コメント