前提・実現したいこと
androidstudioで4択クイズアプリを作っていてdatabaseから問題を表示させたいのですが、最初のスタートボタンを押すとアプリが落ちてしまいます。
そこでスタートボタンを押したら正常にdatabaseに登録した問題がクイズ画面に表示されるようにしたいです。
発生している問題・エラーメッセージ
問題を表示させるプログラムを打つ前までは正常にスタートボタンを押してから問題画面まで遷移していたのですが、そのプログラムを打ってからエラーメッセージなど出ないもののアプリが落ちてしまいます。
よろしくお願いいたします。
該当のソースコード
関係しそうなソースコードを張っておきます
**SecondActivity.java** package com.quiz.myapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.TextView; import static com.quiz.myapplication.R.layout.activity_second; public class SecondActivity extends AppCompatActivity { String QuestionNo; String Seikai; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(activity_second); Intent intent = getIntent(); QuestionNo = intent.getStringExtra("QuestionNo"); **ここから~~** } @Override protected void onResume() { super.onResume(); // 画面↑にあるテキストを「クイズNo. + 問題No で表示 ((TextView)findViewById(R.id.textNo)).setText("クイズNo." + QuestionNo); // 問題文セット処理呼び出し setQuestion(); } // 問題文セット処理 private void setQuestion(){ DatabaseHelper dbHelper = new DatabaseHelper(this); SQLiteDatabase db = dbHelper.getReadableDatabase(); String sql = "SELECT Pref, ans0, ans1, ans2, ans3, ans4 FROM quiz WHERE _id=" + QuestionNo; // SQL文を実行してカーソルを取得 Cursor c = db.rawQuery(sql, null); c.moveToFirst(); // データベースから取ってきたデータを変数にセット String monday = c.getString(c.getColumnIndex("Pref")); String Choice1 = c.getString(c.getColumnIndex("ans1")); String Choice2 = c.getString(c.getColumnIndex("ans2")); String Choice3 = c.getString(c.getColumnIndex("ans3")); String Choice4 = c.getString(c.getColumnIndex("ans4")); Seikai = c.getString(c.getColumnIndex("ans0")); // 答え // データベースのクローズ処理 c.close(); db.close(); ((TextView)findViewById(R.id.textQuestion)).setText(monday); ((Button)findViewById(R.id.button1)).setText(Choice1); ((Button)findViewById(R.id.button2)).setText(Choice2); ((Button)findViewById(R.id.button3)).setText(Choice3); ((Button)findViewById(R.id.button4)).setText(Choice4); } **~~ここまでのプログラムを打つと落ちてしまいます** // 選択肢がクリックされた時の処理 public void onClick(View v){ } } **DatabaseHelper.java** package com.quiz.myapplication; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHelper(Context context) { super(context, "quiz.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { // テーブルの作成 db.execSQL("CREATE TABLE quiz " + "(" + "_id INTEGER PRIMARY KEY AUTOINCREMENT" + ", Pref TEXT" + ", ans0 TEXT" + ", ans1 TEXT" + ", ans2 TEXT" + ", ans3 TEXT" + ", ans4 TEXT" + ")"); // 初期データ投入 db.execSQL("INSERT INTO quiz(Pref,ans0, ans1, ans2, ans3, ans4,) values ('ああ','いい','うう','ええ','おお','か');"); db.execSQL("INSERT INTO quiz(Pref,ans0, ans1, ans2, ans3, ans4,) values ('herj','uje','rhe','he','fa','w');"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } **追記** **MainActivity ** package com.quiz.myapplication; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // idがtransitionのボタンを取得 Button button = (Button) findViewById(R.id.transition); // clickイベント追加 button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { // インテント作成 第二引数にはパッケージ名からの指定で、遷移先クラスを指定 Intent intent = new Intent(MainActivity.this, com.quiz.myapplication.SecondActivity.class); // Activity起動 startActivity(intent); } }); }
ここにより詳細な情報を記載してください。