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

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

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

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

Java

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

Android Studio

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

Q&A

解決済

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

stayhome
stayhome

総合スコア1

SQLite

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

Java

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

Android Studio

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

2回答

0グッド

1クリップ

402閲覧

投稿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"

以下のような質問にはグッドを送りましょう

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

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

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

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

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

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

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

適切な質問に修正を依頼しましょう。

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 編集

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

回答2

0

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

投稿2022/10/14 07:20

stayhome

総合スコア1

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

jimbe

2022/10/14 08:35

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

2022/10/15 11:38

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

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

総合スコア10837

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

stayhome

2022/10/14 07:17

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

SQLite

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

Java

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

Android Studio

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