4択クイズアプリ

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

 
この講座の目次はこちら

Android Studio 3.x / 4.0.1 をお使いの方はこちらをお読み下さい。

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

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

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

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


 

動画

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

 
 

テキスト

1. 正解数をResultActivity.javaに渡す

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

正解数をインテントで渡す
 

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

 

必要なimport

alt キーと return キーを押して警告を消してください。

必要なimport
 

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

import android.content.Intent;

 
 

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

2. 正解数の表示

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

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

 

正解数を取得

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

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

正解数は int 型だったので、getIntExtra() を使います。

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

正解数を表示

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

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

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

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

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

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

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

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

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

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

 

必要なimport

alt キーと return キーを押して警告を消します。

必要なimport
 

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

import android.content.SharedPreferences;

 
 

13行目:SharedPreferences の準備

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

SharedPreferences prefs = getSharedPreferences("quizApp", MODE_PRIVATE);

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

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

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

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

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

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

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

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

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

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

 
 

24行目~:トータルスコアを保存する

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

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

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

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

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

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

SharedPreferences 使い方のヒント

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

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

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

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

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

4. アプリの実行

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

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

結果画面の確認
 
 

完成

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

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

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

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

完全版では

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

を実装していきます。

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

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

 
 

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

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

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

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

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

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

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

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

無料体験はこちら

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

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

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

3. Treehouse

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

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

COMMENT

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

CAPTCHA