4択クイズアプリ

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

 

この記事は Android Studio 3.x / 4.0.1 に対応しています。
Android Studio 4.1 以降のバージョンをお使いの方はこちらをお読み下さい。

 
 

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


 

動画

動画では Android Studio 3.1.4 を使用していますが 3.6 / 4.0 でも動作確認済みです。

【Android Studio】4択クイズアプリ開発講座 #7 クイズ結果の表示とスコアの保存

 
 

解説

正解数をResultActivityに渡す

まずは正解数を結果画面で表示するために、MainActivity(ゲーム画面)から rightAnswerCount(正解数)を ResultActivity(結果画面)へ渡します。

MainActivity.java を開いて、6~8行目を追加してください。

 
 

必要なimport

前回までと同様にalt + returnを押して警告を消します。


 

追加される import はこの1行です。

import android.content.Intent;

 
 

Intent(インテント)とは?

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

Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
startActivity(intent);

インテントを作成して startActivity に渡すことで結果画面を表示することができます。
 

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

intent.putExtra("RIGHT_ANSWER_COUNT", rightAnswerCount);

putExtra(取り出す時に使うキー, 渡したい値)のように使います。
キーは string(文字列)ですが、値は string, int, floatなどをセットすることができます。
 
 

正解数の表示

次に MainActivity から渡した正解数を結果画面で受け取って表示します。

ResultActivity.java を開いて、6~8行目を追加してください。

Warning が出ている箇所があると思いますが、最後に修正するのでそのままにしておいて下さい。

正解数を取得

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

先ほど MainActivity.java で設定したキー RIGHT_ANSWER_COUNT を使って、正解数を取得します。

正解数は int 型だったので、getIntExtra() を使います。
書き方はgetIntExtra(キー, 値が取得できなかった場合の値)となります。
 
 

正解数を表示

8行目 resultLabel.setText(score + " / 5");

findViewById で取得した resultLabel に正解数を「3 / 5」と表示します。
 

「5問中3問正解」と表示したい場合は、このように書いてみてください。

resultLabel.setText("5 問中 " + score + " 問正解");

 
 

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

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

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

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

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

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

見やすいように順番を変えてコメントも書きましたが、新しくに追加したコードは7, 13, 14, 17, 21, 24~26行目です。

Warning が出ている箇所があると思いますが、最後に修正するのでそのままにしておいて下さい。

必要なImport

alt + returnを押して警告を消します。
 


 

追加される import はこの2行です。

import android.content.Context;
import android.content.SharedPreferences;

 
 

SharedPreferencesの準備

まずは SharedPreferences を使えるようにします。

13行目 SharedPreferences prefs = getSharedPreferences("quizApp", Context.MODE_PRIVATE);

getSharedPreferences(データの名前, モード)のように書きます。

モードには、他のアプリからも読み書きできる

  • MODE_WORLD_READABLE
  • MODE_WORLD_WRITEABLE
  • MODE_MULTI_PROCESS

がありますが、今回はこのクイズアプリでのみ使用できれば良いので MODE_PRIVATE にします。
 
 

トータルスコアを取り出す

14行目 int totalScore = prefs.getInt("totalScore", 0);

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

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

トータルスコアを表示する

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

17行目 totalScore += score;
21行目 totalScoreLabel.setText("トータルスコア : " + totalScore);

 
 

トータルスコアを保存する

24行目 SharedPreferences.Editor editor = prefs.edit();
25行目 editor.putInt("totalScore", totalScore);
26行目 editor.apply();

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

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

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

 

ここが一致しないとデータを保存できても読み出せなくなってしまうのでお気をつけください。

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

SharedPreferences 使い方のヒント

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

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

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

String userName = prefs.getString("KEY_NAME", "名無しさん");
editor.putString("KEY_NAME", userName);

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

もどるボタンの実装

最後に「もどる」ボタンを押すとクイズ画面に戻るようにします。

activity_result.xml で、このように「もどる」ボタンを書きました。


 

onClick に設定したボタンが押された時に呼ばれる returnTop メソッドを書いていきます。

7~10行目を追加します。

 
 

必要な import

前回までと同様にalt + returnを押して警告を消します。


 

追加される import はこの2行です。

import android.content.Intent;
import android.view.View;

 
 

Intent

画面遷移は MainActivity から正解数を渡した時と同じようにインテントを使用しています。
今回は何もデータを渡さないので、インテントを作成して startActivity に渡すだけです。

以下のように1行にまとめて書くこともできます。

startActivity(new Intent(getApplicationContext(), MainActivity.class));

 
 

完成

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

完成版のサンプルコードは GitHub からダウンロードできます。
GitHub:https://github.com/codeforfun-jp/quizapp
参考:GitHubからAndroid Studio プロジェクトをダウンロード・実行する方法
 
 

2020年8月追加

Warning の解消方法を追加しました。
そのままにしておいても今のところプログラム自体に影響はないので、気になる方だけ進めてみてください。

第8回「Warning の解消」に進む
 
 

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

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

ここまででもクイズアプリとしては十分に機能しますが「もっとアプリ開発をしてみたい!自分のアプリをリリースしたい!」という方のために、この講座の完全版をご用意しました。

完全版では

  • SQLite Databaseを使ったクイズ管理
  • クイズカテゴリの選択
  • 正解・不正解の効果音
  • AdMob 広告
  • Google Play Games との連携
  • リーダーボードによるランキング機能
  • アチーブメント(実績)機能

を実装していきます。

Google Play Store へのアプリの公開方法・更新方法も紹介しているので、講座を進めながらアプリを全世界に公開することができます。
 

ここまでと同じように全手順の動画・テキスト解説付きです。もう少し挑戦してみたい!という方はぜひご参加お待ちしています
 

 
 

ABOUT ME
Sara
「わかりやすく・シンプル」をモットーに、スマホアプリ・ウェブアプリの作り方を紹介します。 独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています🙂
あなたにオススメのプログラミング講座

この講座では Android Studio で4択クイズアプリを開発しながら

  • SQLite データベースの使い方
  • カテゴリ別のクイズ出題
  • AdMob 広告の実装
  • Play ストアへのアプリの公開
  • Google Play ゲームとの連携

を学ぶことができます。

アプリを開発するだけでなく、アプリをリリースして広告収入を得たいという方にオススメの講座です。

guest
4 Comments
古い順
新しい順 人気順
Inline Feedbacks
View all comments
gucci
gucci
1 year ago

4択クイズアプリで勉強させて頂きました。
会社の業務効率化のためにVBA、ADO、SQLを駆使してエクセル・アクセスである程度の事ができるレベルに達しているのですが、副業や転職には全く役に立たないので、javaの勉強を始めたのですが、実際にコーディングするのが一番だと思い、せっかくならアプリの勉強もやってみよう!とチャレンジしています。
ProgateやUdemy、ドットインストールなども利用しましたが、AndroidStudioのバージョンが古かったり、説明が下手だったり、いまいちピンと来なかったのですが、Saraさんのブログは非常に分かり易かったです。
Android 開発のための Java 入門の完成、楽しみにしております。

lia
lia
7 months ago

四択クイズアプリ参照させていただきました。

私は、androidエンジニアを目指している学生です。

androidエンジニアを目指しているからにはせめて、インターンする際に自己アピールも含めて、自作のandroidアプリを作っておかねばと思っていました。

しかし、本やサイトで学んでいても内容が抽象的な内容で実践的でなかったり、正直説明が分かりにくいというのが学ぶ上での障害となっていました。

そんな中、Saraさんのサイトに出会いました。色々なサイトを探してきましたが、このサイトが一番分かりやすく且、短時間でサンプルアプリを作ることができました。本当にありがとうございました。このサンプルアプリを改善することでさらにプログラミングを上達させたいなと思います。これからも、このサイトを参照して色々と学ばせていただきます。

このサイトを立ち上げていただいてありがとうございました。

4
0
この記事にコメントするx