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

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

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2320閲覧

android studioにてデータベースの値をintentで渡そうとした際にアプリが強制終了してしまう

hanamero50

総合スコア18

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/12/03 13:05

クイズゲームを作っていまして、データベースからのデータをボタンを押した後にintentで次のページへデータを渡せばよいと教えていただいたのでその通りにやってみたのですが、最初のスタートボタンを押して問題表示画面に遷移して問題表示されるはずが遷移せずに強制終了してしまいます。

どうすればよいかわからないので教えていただきたいです。

MainGame.java 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(); /* SELECT文 テーブル名 MyTableから _idとQuestionNoがマッチする項目を取得する条件式 */ String sql = "SELECT Pref, City0, City1, City2, City3, City4 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); // 遷移開始 startActivity(intent); break; case R.id.button2: intent = new Intent(MainGame.this, kaitou.class); intent.putExtra("kaisetu", mKaisetu); // 遷移開始 startActivity(intent); break; case R.id.button3: intent = new Intent(MainGame.this, kaitou.class); intent.putExtra("kaisetu", mKaisetu); // 遷移開始 startActivity(intent); break; case R.id.button4: intent = new Intent(MainGame.this, kaitou.class); intent.putExtra("kaisetu", mKaisetu); // 遷移開始 startActivity(intent); break; } } }
強制終了してしまう際のlogcat 2018-12-03 21:48:09.749 4961-4961/com.example.quiz.quizgame E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.quiz.quizgame, PID: 4961 java.lang.RuntimeException: Unable to resume activity {com.example.quiz.quizgame/com.example.quiz.quizgame.MainGame}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3581) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3621) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2862) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. at android.database.CursorWindow.nativeGetString(Native Method) at android.database.CursorWindow.getString(CursorWindow.java:438) at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51) at com.example.quiz.quizgame.MainGame.setQuestion(MainGame.java:79) 該当コード setQuestion(); at com.example.quiz.quizgame.MainGame.onResume(MainGame.java:59) 該当コード mKaisetu = c.getString(c.getColumnIndex("kaisetu")); at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1355) at android.app.Activity.performResume(Activity.java:7117) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3556)
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" + ")"); // 初期データ投入 //記述例 正解を問1~4のいずれかに入れる db.execSQL("INSERT INTO MyTable(Pref,City0, City1, City2, City3, City4,kaisetu,Clear) values ('問題文','正解','問1','正解','問3','問4','これは解説です',1);"); } /* * onUpgradeメソッド * onUpgrade()メソッドはデータベースをバージョンアップした時に呼ばれる */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

java

1 /* 2 SELECT文 3 テーブル名 MyTableから _idとQuestionNoがマッチする項目を取得する条件式 4 */ 5 String sql = "SELECT Pref, City0, City1, City2, City3, City4 FROM MyTable ORDER BY RANDOM()";

このSQL文の中にkaisetuがありませんから、getColumnIndex("kaisetu")のときにアプリが落ちるでしょう。前回の回答でもkaisetuを付け加えてたものを示したはずです。説明不足だったのかもしれないのでそこは申し訳ないですが。

投稿2018/12/03 14:21

keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keicha_hrs

2018/12/03 14:29

前回の回答を実践してみてうまく動かなかったことによる質問ならば、新たに立てるのではなく前の質問へのコメント投稿をするべきだと思います。それから、回答に対してノーレスポンスというのは、答える側にとっては回答意欲を失わせる行為です。前アカウント(新アカウントを作ること自体非推奨だが)から含めて回答のついたものに対して然るべき対応をいただけないのであれば、次回以降は回答しません。
hanamero50

2018/12/06 01:01

返信遅れてもうしわけありません。 レスポンスをしたつもりでしたが、うまくできていないようでした。 私も真摯な対応に努めるようにします。 教えていただいた回答の方はおかげ様でうまくいきました。本当に助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問