4択クイズアプリ

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

ここまでの記事はこちら
 

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

 


 

動画

【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などをセットすることができます。
 
 

正解数の表示

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

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

 

正解数を取得

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

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

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

正解数を表示

resultLabel.setText(score + " / 5");

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

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

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

 
 

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

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

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

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

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

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

 

必要な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はこの2行です。

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

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

完成

これで全て完成です!
エミュレーターで確認してみてください。

 
 

クイズアプリの完全版について

もっとアプリ開発をしてみたい!自分のアプリをリリースしたい!という方のために、この講座の完全版をご用意しました。
 
完全版では

  • SQLite Databaseを使ってのクイズ管理
  • クイズカテゴリの選択
  • 正解・不正解の効果音
  • リーダーボードによるランキング

などを実装していきます。
 
アプリのリリース方法も紹介していますので、ぜひチェックしてみてください????
 

 
 

サンプルコード

 

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

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

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

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

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

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

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

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

無料体験はこちら

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

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

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

3. Treehouse

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

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

COMMENT

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

CAPTCHA