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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

Q&A

解決済

2回答

817閲覧

エミュレータ―が落ちてしまう.

stayhome

総合スコア1

SQLite

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

0グッド

1クリップ

投稿2022/10/13 14:57

編集2022/10/17 05:27

ボールドテキスト### 前提

android studioでカレンダーを作っています。
エミュレータ実行時に特定の処理を実行すると,アプリが落ちてしまいます.コードなどにエラーは,出ておらず原因がわかりません.

実現したいこと

・データベースへの挿入を正常に終了させたい

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Java

1該当部分 2 3public void onSaveButtonClick(View view){ 4 //入力された内容を取得 5 EditText etNote = findViewById(R.id.etNote); 6 String note = etNote.getText().toString(); 7 8 //データベースヘルパーおぶしぇくとを作成 9 DatabaseHelper helper = new DatabaseHelper(MainActivity.this); 10 //データベースヘルパーオブジェクトからデータベース節毒オブジェクトを取得 11 SQLiteDatabase db = helper.getWritableDatabase(); 12 13 try{ 14 //まず,リストで選択された日付のデータを削除.その後インサート. 15 //削除用SQL文字列を用意 16 String sqlDelete = "DELETE FROM schedule WHERE _id = ?"; 17 SQLiteStatement stmt = db.compileStatement(sqlDelete); 18 stmt.bindLong(1, _dateId); 19 stmt.executeUpdateDelete(); 20 21 String sqlInsert = "INSERT INTO schedule (_id, note) VALUES (?, ?)"; 22 stmt = db.compileStatement(sqlInsert); 23 stmt.bindLong(1, _dateId); 24 stmt.bindString(2, note); 25 stmt.executeInsert(); 26 27 } 28 finally{ 29 db.close(); 30 }
public class DatabaseHelper extends SQLiteOpenHelper { /** * データベースファイル名の定数フィールド */ private static final String DATABASE_NAME = "schedule.db"; /** * バージョン情報の定数フィールド. */ private static final int DATABASE_VERSION = 1; /** * コンストラクタ. */ public DatabaseHelper(Context context){ //親クラスのコンストラクタ呼び出し super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db){ //テーブル作成用SQL文字列作成 StringBuilder sb = new StringBuilder(); sb.append("CREATE TABLE schedule("); sb.append("_id INTEGER PRIMARY KEY,"); sb.append("note TEXT"); sb.append(");"); String sql = sb.toString(); //SQLの実行 db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ } }

試したこと

ソースコードで示した部分をコメント処理した場合,データベース以外の部分は正常に動くことを確認しています.また,作成する前に参考にしたプログラムは正常に動作しました.

補足情報(FW/ツールのバージョンなど)

java version "1.8.0_333"

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

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

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

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

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

jimbe

2022/10/14 04:36

コードはファイル毎に分けてマークダウンで囲ってください。 実行時の例外は通常 logcat に出力されます。そちらで問題が無いか確認してください。
stayhome

2022/10/14 06:52

ご教授いただきありがとうございます.次回質問させていただくときに,改善致します. logcatのほう確認したら,エラーを吐いていました.確認してみます. ご返信いただきありがとうございます
jimbe

2022/10/14 06:54

質問は編集できます。teratail は解決後も情報として残す方針ですので、次回と言わず本件から直して頂けると助かります。
stayhome

2022/10/17 05:29 編集

編集出来ること知らなかったです.ありがとうございます. ソースコードの記載方法変更させていただきました. 教えた頂きありがとうございました.
guest

回答2

0

ヘルパークラスのテーブル作成を書き換えを行ったが,同一のエミュレータ上に,以前作成したテーブルが残っていたため,作成されなかった.以前のテーブルにアクセスしていたため,データの挿入部分でエラーが発生していた.

投稿2022/10/14 07:20

stayhome

総合スコア1

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

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

jimbe

2022/10/14 08:35

ヘルパークラスを修正したらバージョン番号をアップして onUpgrade を書いておいたほうが良いですね。
stayhome

2022/10/15 11:38

たびたびありがとうございます. onUpgradeのほうに記述するように致します.
guest

0

ベストアンサー

こちらの環境では以下のコードで問題ありませんでした。
(DatabaseHelper はそのまま, onSaveButtonClick メソッドもログを入れただけです。)

java

1import androidx.appcompat.app.AppCompatActivity; 2 3import android.database.sqlite.*; 4import android.os.Bundle; 5import android.util.Log; 6import android.view.View; 7import android.widget.EditText; 8 9public class MainActivity extends AppCompatActivity { 10 long _dateId = 123; 11 12 @Override 13 protected void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.activity_main); 16 } 17 public void onSaveButtonClick(View view) { 18 //入力された内容を取得 19 EditText etNote = findViewById(R.id.etNote); 20 String note = etNote.getText().toString(); 21 Log.d("MainActivity ***", "onSaveButtonClick: note=" + note); 22 23 //データベースヘルパーおぶしぇくとを作成 24 DatabaseHelper helper = new DatabaseHelper(MainActivity.this); 25 //データベースヘルパーオブジェクトからデータベース節毒オブジェクトを取得 26 SQLiteDatabase db = helper.getWritableDatabase(); 27 28 try { 29 //まず,リストで選択された日付のデータを削除.その後インサート. 30 //削除用SQL文字列を用意 31 String sqlDelete = "DELETE FROM schedule WHERE _id = ?"; 32 SQLiteStatement stmt = db.compileStatement(sqlDelete); 33 stmt.bindLong(1, _dateId); 34 int count = stmt.executeUpdateDelete(); 35 Log.d("MainActivity ***", "delete: count=" + count); 36 37 String sqlInsert = "INSERT INTO schedule (_id, note) VALUES (?, ?)"; 38 stmt = db.compileStatement(sqlInsert); 39 stmt.bindLong(1, _dateId); 40 stmt.bindString(2, note); 41 long id = stmt.executeInsert(); 42 Log.d("MainActivity ***", "insert: id=" + id); 43 44 } finally { 45 db.close(); 46 } 47 } 48}

res/layout/activity_main.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".MainActivity"> 8 9 <EditText 10 android:id="@+id/etNote" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:text="Hello World!" 14 app:layout_constraintBottom_toBottomOf="parent" 15 app:layout_constraintEnd_toEndOf="parent" 16 app:layout_constraintStart_toStartOf="parent" 17 app:layout_constraintTop_toTopOf="parent" /> 18 <Button 19 android:id="@+id/button" 20 android:layout_width="wrap_content" 21 android:layout_height="wrap_content" 22 android:text="save" 23 android:onClick="onSaveButtonClick" 24 app:layout_constraintBottom_toBottomOf="parent" 25 app:layout_constraintEnd_toEndOf="parent" 26 app:layout_constraintStart_toStartOf="parent" 27 app:layout_constraintTop_toBottomOf="@id/etNote" /> 28 29</androidx.constraintlayout.widget.ConstraintLayout>

実行結果(saveを三回)

plain

1D/MainActivity ***: onSaveButtonClick: note=Hello World! 2D/MainActivity ***: delete: count=0 3D/MainActivity ***: insert: id=123 4D/MainActivity ***: onSaveButtonClick: note=Hello World! 5D/MainActivity ***: delete: count=1 6D/MainActivity ***: insert: id=123 7D/MainActivity ***: onSaveButtonClick: note=Hello World! 8D/MainActivity ***: delete: count=1 9D/MainActivity ***: insert: id=123

投稿2022/10/14 06:48

編集2022/10/14 06:57
jimbe

総合スコア12632

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

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

stayhome

2022/10/14 07:17

ご確認していただきありがとうございます. 新しくエミュレータを起動した所,正常に動作したのを確認しました. 同じエミュレータ上で,以前にカラムの違う同じテーブルを作成していたことによるものだと思います. 初歩的なミスで恥ずかしい限りです. お時間とって確認していただきありがとうございました.また,何かあればよろしくお願い致します.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問