ここから本文です

至急お願いします! Android Studio について質問です。

bat********さん

2018/11/718:24:01

至急お願いします!
Android Studio について質問です。

package quizgame.test.com.quizgame3;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;


public class MainGame extends Activity {

int QuestionNo;
int i;
String Seikai;


private SoundPool mSoundPool;
private int[] mSoundId = new int[2];

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main_game);
Intent intent = getIntent();
QuestionNo = intent.getIntExtra("QuestionNo",1);
}

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

mSoundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
mSoundId[0] = mSoundPool.load(getApplicationContext(), R.raw.se_maoudamashii_onepoint15, 1);
mSoundId[1] = mSoundPool.load(getApplicationContext(), R.raw.se_maoudamashii_onepoint33, 1);

((TextView) findViewById(R.id.textNo)).setText("クイズNo." + QuestionNo);

setQuestion();

}




private void setQuestion() {

DatabaseHelper2 dbHelper = new DatabaseHelper2(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();

String sql = "SELECT Pref,City0,City1,City2,City3,City4 FROM MyTable WHERE _id=" + QuestionNo;

Cursor c = db.rawQuery(sql, null);
c.moveToFirst();

String Kenmei = c.getString(c.getColumnIndex("Pref"));
String Choice1 = c.getString(c.getColumnIndex("City1"));
String Choice2 = c.getString(c.getColumnIndex("City2"));
String Choice3 = c.getString(c.getColumnIndex("City3"));
String Choice4 = c.getString(c.getColumnIndex("City4"));

Seikai = c.getString(c.getColumnIndex("City0"));

((TextView) findViewById(R.id.textQuestion)).setText(Kenmei);
((TextView) findViewById(R.id.button1)).setText(Choice1);
((TextView) findViewById(R.id.button2)).setText(Choice2);
((TextView) findViewById(R.id.button3)).setText(Choice3);
((TextView) findViewById(R.id.button4)).setText(Choice4);


}



public void onClick(View v) {


if (((Button) v).getText().equals(Seikai)) {
//正解の処理
mSoundPool.play(mSoundId[0], 1.0f, 1.0f, 0, 0, 1.0f);
Toast.makeText(this, "○正解", Toast.LENGTH_SHORT).show();
i++;

} else {
//不正解の処理
mSoundPool.play(mSoundId[1], 1.0f, 1.0f, 0, 0, 1.0f);
Toast.makeText(this, "×不正解", Toast.LENGTH_SHORT).show();
}
QuestionNo++;

if (QuestionNo>10){
Intent intent = new Intent(MainGame.this, Result.class);
intent.putExtra("i",((Button) v).getText());
startActivity(intent);
}else {
Intent intent = new Intent(this, MainGame.class);
intent.putExtra("QuestionNo", ((Button) v).getText());
startActivity(intent);
}
}


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

mSoundPool.unload(mSoundId[0]);
mSoundPool.unload(mSoundId[1]);

mSoundPool.release();
}
}


このようなプログラムをするとボタンを押したときにQuestionNo = 1 に戻り、戻るのボタンを押すとQuestionNo が 1以降になってしまいます。
直したいのですがどこを直したらいいのかわかりません。
初心者なのでわかりやすく説明していただけるとありがたいです。

補足public void onClick(View v) {



if (((Button) v).getText().equals(Seikai)) {
//正解の処理
mSoundPool.play(mSoundId[0], 1.0f, 1.0f, 0, 0, 1.0f);
Toast.makeText(this, "○正解", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this,MainGame.class);
intent.putExtra("i",i + 1);
startActivity(intent);
} else {
//不正解の処理
mSoundPool.play(mSoundId[1], 1.0f, 1.0f, 0, 0, 1.0f);
Toast.makeText(this, "×不正解", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this,MainGame.class);
intent.putExtra("i",i);
startActivity(intent);

}

if (QuestionNo>=10){
Intent intent = new Intent(this,Result.class);
intent.putExtra("i",i);
startActivity(intent);
}
else {
Intent intent = new Intent(this,MainGame.class);
intent.putExtra("QuestionNo", QuestionNo + 1);
startActivity(intent);
}

}

今はこのような感じで結果がうまく表示されません。
自分でも頑張ってやってみます

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
56
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

rp0********さん

リクエストマッチ

2018/11/909:13:23

以下の2点を修正すればいけるかな?
QuestionNo++;を消す
intent.putExtra("QuestionNo", ((Button) v).getText());
を以下に変更する
intent.putExtra("QuestionNo", QuestionNo + 1);


一応解説
> 戻るボタンでQuestionNo が 1以降になる
QuestionNo++しているからです。
戻るボタンで前の画面に戻ると、前のActivityはonResume()から処理を始めて画面を作り直します。
このとき、QuestionNoは次の番号になってるので、onResume()の問題作る処理で次の問題を取得してしまうからです。

> ボタンを押すとQuestionNo = 1 に戻る
Activityの画面遷移時、
次の画面にデータを渡したいとき
Intent#putExtra()でデータを保存
Intent#getExtra()でデータの取り出し
をしますね。
保存処理の引数は以下です。
Intent#putExtra(キーワード, 渡したいデータ)
質問者さんはボタンの文言を次の画面に渡してます。ここで渡すべきは次の問題番号です。なので、「QuestionNo + 1」を渡す必要があります。
なぜ次の画面でQuestion1に戻るのかは、
Intent#getExtra()にあります。
本質問はIntent#getIntExtra()でデータ取得してます。これは、Int型のデータ取得に使いますが、質問者さんが保存してるのは文字です。なので、データの取得に失敗します。
データの取得に失敗すると、第二引数の「1」を戻り値として返します。
なので、次の画面の問題は必ず1になってます。

スマホ越しでソースコード読んでるから認識違いあったらすいません(^_^;)

  • 質問者

    bat********さん

    2018/11/1023:19:38

    申し訳ないですが結果をresultというactivityに表示したいのですが遷移するときエラーになりました。
    どう直せばいいかわかりません

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2018/11/13 00:21:33

ありがとうございます!
お疲れ様でした!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる