質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

android studio クイズアプリで結果を表示させたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 590

hanamero50

score 12

前提・実現したいこと

クイズアプリで10問解いた後に10問中何問正解でしたと結果を表示させたいです。
流れは クイズスタート→(問題表示及び回答画面→解説画面)10回繰り返す→結果表示
といった流れです。

問題表示から解説画面へ遷移して、また別の問題を表示させるところまではできたのですが、10回解いた後の流れをどう記述すればよいのか参考のサイトなどでもいいので教えていただけるとうれしいです。

該当のソースコード

public class MainGame extends Activity {


    String Seikai;
    String mKaisetu;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //タイトルバーを非表示にする(必ずsetContentViewの前にすること)
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        // レイアウトをセットする
        setContentView(R.layout.activity_main_game);

    }

    @Override
    protected void onResume() {
        super.onResume();

        // 問題文セット処理呼び出し
        setQuestion();

    }

    // 問題文セット処理
    private void setQuestion() {
            // 作成したDatabaseHelperクラスに読み取り専用でアクセス
            DatabaseHelper dbHelper = new DatabaseHelper(this);
            SQLiteDatabase db = dbHelper.getReadableDatabase();

            String sql = "SELECT Pref, City0, City1, City2, City3, City4,kaisetu FROM MyTable  ORDER BY RANDOM()";

            // SQL文を実行してカーソルを取得
            Cursor c = db.rawQuery(sql, null);
            c.moveToFirst();
            mKaisetu = c.getString(c.getColumnIndex("kaisetu"));


            // データベースから取ってきたデータを変数にセット
            String Kenmei = c.getString(c.getColumnIndex("Pref"));
            String Choice1 = c.getString(c.getColumnIndex("City1")); // 四択の選択肢1
            String Choice2 = c.getString(c.getColumnIndex("City2")); // 四択の選択肢2
            String Choice3 = c.getString(c.getColumnIndex("City3")); // 四択の選択肢3
            String Choice4 = c.getString(c.getColumnIndex("City4")); // 四択の選択肢4

            Seikai = c.getString(c.getColumnIndex("City0")); // 答え


            // データベースのクローズ処理
            c.close();
            db.close();

            ((TextView) findViewById(R.id.textQuestion)).setText(Kenmei);
            ((Button) findViewById(R.id.button1)).setText(Choice1); // 四択の選択肢1をボタンに表示
            ((Button) findViewById(R.id.button2)).setText(Choice2); // 四択の選択肢2をボタンに表示
            ((Button) findViewById(R.id.button3)).setText(Choice3); // 四択の選択肢3をボタンに表示
            ((Button) findViewById(R.id.button4)).setText(Choice4); // 四択の選択肢4をボタンに表示
        }

        // 選択肢がクリックされた時の処理
        public void onClick(View v) {

                    Intent intent;
                    switch (v.getId()) {
                        case R.id.button1:
                    intent = new Intent(MainGame.this, kaitou.class);
                    intent.putExtra("kaisetu", mKaisetu);
                    intent.putExtra("City0",Seikai);
                    // 遷移開始
                    startActivity(intent);
                    break;

                case R.id.button2:
                    intent = new Intent(MainGame.this, kaitou.class);
                    intent.putExtra("kaisetu", mKaisetu);
                    intent.putExtra("City0",Seikai);
                    // 遷移開始
                    startActivity(intent);
                    break;

                case R.id.button3:
                    intent = new Intent(MainGame.this, kaitou.class);
                    intent.putExtra("kaisetu", mKaisetu);
                    intent.putExtra("City0",Seikai);
                    // 遷移開始
                    startActivity(intent);
                    break;
                case R.id.button4:
                    intent = new Intent(MainGame.this, kaitou.class);
                    intent.putExtra("kaisetu", mKaisetu);
                    intent.putExtra("City0",Seikai);
                    // 遷移開始
                    startActivity(intent);
                    break;
            }

                }
public class kaitou extends Activity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //タイトルバーを非表示にする(必ずsetContentViewの前にすること)
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        // レイアウトをセットする
        setContentView(R.layout.activity_kaitou);



        Intent intent = getIntent();
        String City0 = intent.getStringExtra("City0");
        String kaisetu = intent.getStringExtra("kaisetu");

   //解説
        if (kaisetu != null) {

            ((TextView) findViewById(R.id.textView3)).setText(kaisetu);
        }
   //答え
        if (City0 != null) {
            ((TextView) findViewById(R.id.textView)).setText(City0);
        }

    }
    //ボタンクリック時の関数
    public void onClick(View v) {

        Intent intent;
        switch (v.getId()) {
            case R.id.button3:
                intent = new Intent(kaitou.this, MainGame.class);
                // 遷移開始
                startActivity(intent);
                break;
        }
    }

}
public class DatabaseHelper extends SQLiteOpenHelper {

    public DatabaseHelper(Context context) {

        /*
            ここで任意のデータベースファイル名と、バージョンを指定する
            データベースファイル名 = MyTable.db
            バージョン = 1
         */
        super(context, "MyTable.db", null, 1);
    }



    @Override
    public void onCreate(SQLiteDatabase db) {
        // テーブルの作成
        db.execSQL("CREATE TABLE MyTable " +
                "(" +
                "_id INTEGER PRIMARY KEY AUTOINCREMENT" +
                ", Pref TEXT" +
                ", City0 TEXT" +
                ", City1 TEXT" +
                ", City2 TEXT" +
                ", City3 TEXT" +
                ", City4 TEXT" +
                ",kaisetu TEXT" +
                ",Clear INTEGER" +
                ")");

        // 初期データ投入
        db.execSQL("INSERT INTO MyTable(Pref,City0, City1, City2, City3, City4,kaisetu,Clear) values ('問題文','正解','問1','正解','問3','問4','これは解説です',1);");

 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

10回解いた後の流れをどう記述すればよいのか

どこがわからないのかよくわかりませんが、簡単にやるならクラス変数を作ります。

class example
{
    int question = 1;
    int score = 0;
    if( question == 11 ){   // 10もん終わったら(11問目に入ったら)
        question--;     // 11問になってしまうので-1
        // 画面遷移
    }

    public void Mondai()   // 関数名適当なので注意
    {
        // 問題出す
        if( 正解 ) score++;
        question++;
    }
}

少しめんどくさくても安全性で考えるとパッケージ分けてpackage変数かクラスです

package main.score;

// あくまでクラスはイメージ
class QAndScore
{
    private Integer score = 0;
    private Integer question = 1;

    public QAndScore()
    {
        // 初期化
    }

    public int getScore()
    {
        return score;   // ボクシング(クラスとデータ型の自動変換)
    }
}

追記

questionを問題数、scoreを正解数とすれば、画面遷移はできるということですので、実装できると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/11 22:23

    説明不足ですみません。
    10回解いた結果を次の結果画面に表示させるにはどのようにすればよいかわからなかったのですが、参考にさせていただきます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる