4択クイズアプリ

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

ここまでの記事はこちら
 

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


 

動画

動画では 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 へのアプリの公開方法・更新方法も紹介しているので、講座を進めながらアプリを全世界に公開することができます。
 

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

講座の詳細はこちら:https://courses.codeforfun.jp/p/android-studio-quiz-game
 
 

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

 
独学でプログラミングを勉強するのは難しそう、効率的にプログラミングを学びたいという方はオンラインスクールがオススメです。

オンラインスクールを選ぶときのポイント

  • 無料体験があること
  • 個別サポートがあること

自分にあったスタイルを見つけるために、無料体験のご利用をオススメします。(無料体験後に自分には合わないなと感じたらハッキリ断ってしまって問題ありません。)
 
個別サポートもプログラミング学習に挫折しないために重要なポイントです。エラーや困った時にすぐに個別対応をしてくれるスクールを利用して下さい。

ここでは3つのオンラインスクールを紹介します。
全て無料体験がありますので、ぜひ自分に合ったスクールを見つけてみて下さい????
 

1. TechAcademy(テックアカデミー)

オンライン完結で勉強できるスクールで、コースがとても充実しています。チャットで質問すればすぐに回答を得られるのが一番のおすすめポイントです。
オリジナルのサービスやアプリの開発もサポートしてくれるので、開発したいものが決まっている人にもオススメです。

無料体験はこちら

2. CodeCamp(コードキャンプ)

一対一で受講できる個別指導のプログラミングスクールです。
Webデザイン・Webサービス開発・アプリ開発などを幅広く学習することができます。
マンツーマンなので自分のペースで学習できて、質問もその都度できるのがメリットです。

無料体験レッスンはこちら

3. Treehouse

英語でも良い、英語とプログラミングを同時に勉強したいという方は Treehouse がオススメです。月25ドルで始めることができて、たくさんのプログラミング言語を学ぶことができます。
個別サポートはありませんが、掲示板が充実しています。ほとんどの場合、質問してから30分程度で回答を得ることができます。

7日間の無料体験はこちら

POSTED COMMENT

  1. アバター gucci より:

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

    • Sara Sara より:

      gucciさん、はじめまして!
      サイトを見つけて頂きありがとうございます。
      分かり易いと言っていただけて、とても嬉しいですし励みになります!

      私はVBA周りについてはあまり詳しくないのですが、用語や考え方はJavaと似ている部分もあるのかなと思います。
      全くゼロからプログラミングを始めるという方よりもサクサクと進められる箇所も多いと思いますので、ぜひ色々なアプリを開発してみてください🙂

      Java入門の更新もこれから再開する予定ですので、お時間があるときにまたサイトを覗いて頂ければと思います🙂

  2. アバター lia より:

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

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

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

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

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

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

    • Sara Sara より:

      はじめまして。当サイトを見つけていただきありがとうございます🙂

      インターンのために自作の Android アプリを作っておくというのはとても良いことだと思います!私はインターンの経験はありませんが、初めて仕事をいただくまでにウェブサイトやアプリをたくさん作っていました。簡単なプログラムでも自分で書いたコードをたくさん用意しておけば、いつか必ず役立つと思います。

      私もプログラミングを始めたばかりの頃、本やサイトの内容についていけずに挫折しかけたことがあります。その時の経験から自分と同じような人のお役に立てれば!と思ってこのサイトを始めたので「分かりやすく且、短時間でサンプルアプリを作ることができた」とお聞きして本当に嬉しいです。

      現在、新しい記事や Android 開発の講座を書いていますので、ぜひお時間があるときにまたサイトを覗いてみてください🙂
      少しでも lia さんのお役に立てれば嬉しい限りです。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA