4択クイズアプリ

【Android Studio】クイズアプリ開発講座 第7回「結果の表示とスコアの保存」

Sara

Android Studio Ladybug | 2024.2.1 に対応しました(2024年11月)

ここまでの記事はこちら
Kotlin バージョンはこちら

今回は結果画面にクイズの正解数を表示して、トータルスコアを保存できるようにしていきます。

ここでは intent(インテント)SharedPreferences(シェアードプレファレンシズ)というものを使います。

どちらもアプリ開発でよく使われるので、いつでもサクッと実装できるように覚えておくと便利だと思います。

それでは、はじめていきましょう!

結果の表示とトータルスコアの保存

1. ViewBinding の用意

クイズ画面と同じく ViewBinding を使えるようにします。

ResultActivity.java を開いて7・8行目を追加・変更します。

2. 正解数を結果画面に渡す

正解数を結果画面で表示できるように、rightAnswerCount(正解数)を MainActivity(クイズ画面)から ResultActivity(結果画面)へ渡します。

MainActivity.java の onClick メソッドに13〜15行目を追加します。

Intent(インテント)の使い方

新しくアクティビティを開くときは Intent(インテント)を使います。

Intent intent = new Intent(Context context, Class<?> cls);
startActivity(intent);

context(コンテキスト)には現在のアクティビティ、cls には 表示するアクティビティを Class オブジェクトで書きます。

作成したインテントを startActivity に渡すことでアクティビティを表示することができます。

今回は rightAnswerCount(正解数)を ResultActivity(結果画面)に渡すために、startActivity の前にこの1行を書いています。

intent.putExtra("RIGHT_ANSWER_COUNT", rightAnswerCount);

putExtra(取り出す時に使うキー, 渡したい値) と書くことで、遷移先のアクティビティに値を渡すことができます。

キーは String 型(文字列)ですが、値には String, int, float などをセットすることができます。

3. 正解数の表示

次に結果画面に正解数を表示します。

ResultActivity.java を開いて、5・6行目を追加します。

5行目:正解数を受け取る

int score = getIntent().getIntExtra("RIGHT_ANSWER_COUNT", 0);

先ほど値を渡す時に使ったキー RIGHT_ANSWER_COUNT を使って正解数を受け取ります。

正解数は int 型だったので、getIntExtra メソッドを使います。

書き方は getIntExtra(キー, 値が取得できなかった場合の値) となります。

6行目:正解数を表示

binding.resultLabel.setText(getString(R.string.result_score, score));

resultLabel に正解数を「3 / 5」と表示します。

クイズ画面の countLabel と同じように %d の部分に数値 score を入れています。

4. トータルスコアの表示・保存

次に累計正解数をトータルスコアとして表示・保存してみます。

アプリにデータを保存するには

  • SharedPreferences
  • SQLiteデータベース
  • テキストファイル

を使う方法がありますが、今回は一番手軽に使える SharedPreferences を紹介します。

以下のコードを追加します。

見やすいように順番を変えてコメントも書きましたが、新たに追加したコードは 9・10・13・17・20〜22行目です。

9行目:SharedPreferences の準備

まずは SharedPreferences を使うための準備です。

SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);

getPreferences(モード)のように書きます。

MODE_PRIVATE は「このアプリからのみ」アクセスできるモードです。

モードにはいくつか種類がありましたが、現在推奨されていないものが多いので MODE_PRIVATE を使うと覚えておけば問題ありません。

補足

getPreference メソッドで保存した値は、1つのアクティビティでのみ有効になります。ですので、トータルスコアはクイズ画面(MainActivity)で呼び出すことはできません。複数のアクティビティで保存した値を扱う場合は getSharedPreferences(“ファイル名”, モード); と書きます。

10行目:トータルスコアを取り出す

int totalScore = prefs.getInt("TOTAL_SCORE", 0);

getInt(キー, データが無かった場合の数値) のように書きます。

初めてクイズに挑戦した時は、まだトータルスコアが保存されていないので 0 が返ってきます。

17行目:トータルスコアを表示する

binding.totalScoreLabel.setText(getString(R.string.result_total_score, totalScore));

SharedPreferences から取得したトータルスコアに今回のクイズの正解数を加算して(13行目)、最新のトータルスコアを表示します。

20〜22行目:トータルスコアを保存する

SharedPreferences.Editor editor = prefs.edit();
editor.putInt("TOTAL_SCORE", totalScore);
editor.apply();

putInt(キー, 保存する値)のようにデータをセットします。

注意して頂きたいのが、読み出し時・書き込み時のキーを必ず合わせることです。

読み出し時 prefs.getInt("TOTAL_SCORE", 0);
書き込み時 editor.putInt("TOTAL_SCORE", totalScore);

ここが一致しないと保存できても読み出せなくなってしまうのでご注意ください。

最後にapply()で保存します。

SharedPreferences 使い方のヒント

今回はトータルスコアを保存しましたが、ハイスコアやユーザー名、最後にクイズに挑戦した日など色々な使い方ができると思います。

トータルスコア以外にもデータを保存したい場合は、キーを変えることで複数のデータを保存することもできます。

例えば、トータルスコアに加えて、このようにユーザー名を読み書きすることもできます。

読み出し時 String userName = prefs.getString("KEY_NAME", "名無しさん");
書き込み時 editor.putString("KEY_NAME", userName);

ぜひ工夫して使ってみてください。

5. アプリの実行

ここでアプリを実行してみてください。

正解数が ResultActivity に渡されて、結果画面に正しく表示されたでしょうか?

補足: もどるボタンについて

クイズ開始画面に遷移する「もどる」ボタンは講座の完全版でスタート画面を作成した後に実装します。
 
現時点でクイズ画面に遷移させたい場合は onCreate メソッド内に以下のコードを追加してください。

findViewById(R.id.returnBtn).setOnClickListener(view ->
    startActivity(new Intent(ResultActivity.this, MainActivity.class)));

完成

お疲れ様でした!これで全て完成です!

ここまで読んで頂いてありがとうございました。

「アプリ開発って意外と簡単だな」と感じて頂けていれば嬉しい限りです。クイズ内容は自由にアレンジして構わないので、ぜひオリジナルのアプリを作ってみてくださいね。

ONLINE COURSE

さらにクイズアプリ開発を学びたい方

この講座の完全版では、さらにクイズアプリ開発を学ぶことができます。

受講期限なし、個別サポートあり、今すぐに始めることができます!

完全版で学べること
  • クイズのカテゴリ別に出題する方法
  • SQLite データベースを使った実装
  • 効果音の再生
  • 画像を使ったクイズアプリ
  • 答えを入力するクイズアプリ
Subscribe
Notify of
4 Comments
古い順
新しい順 人気順
Inline Feedbacks
View all comments
大塚 俊寛
3 years ago

分かりやすい、説明で勉強になります。
質問ですが「もどる」ボタンの returnTop メソッドはどのように実装
すればいいでしょうか?
見落としていたらすみません。よろしくお願いいたします。

fkd2015
1 year ago

質問失礼します
自分自身で作ったクイズを解き切ると突然アプリが落ちるのですが、何が原因なのでしょうか?

ABOUT ME
Sara
Sara
運営者
書籍やオンライン講座でプログラミングを勉強してフリーランスのプログラマーになりました。
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
主な使用言語:Java / Kotlin / PHP
>> 詳しいプロフィール
>> お問い合わせ
>> 書籍を出版しました!
本格的に学びたい方へ

Code for Fun プログラミング講座

POINT 01

動くコード

プログラミングの文法を学んでも、そこからどのようにアプリ開発ができるのかイメージが湧きにくいものです。

Code for Fun のプログラミング講座では、ゲームやカレンダーなどアプリとして機能するものを作りながらプログラミングを学ぶことができます。

POINT 02

自分のペースで

オンライン講座なので、ご自身のペースで学習を進めて頂けます。

受講期限もないので、いつでも前のレッスンに戻ることができるので安心です。

お申し込みしたその日からすぐに始めることができます。

POINT 03

個別サポート

プログラミング学習では、エラーが起きることはよくあります。そんな時はお気軽にお問い合わせください!

コメント欄またはメールによるサポートを回数無制限でご利用頂けます。(*講座に関連するご質問のみ対応)

今すぐ無料でお試し

4
0
この記事にコメントするx
記事URLをコピーしました