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

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

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

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

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Q&A

解決済

1回答

8104閲覧

API 28の場合、SQLiteDatabase.openDatabaseで落ちてしまう

nnnnn

総合スコア26

SQLite

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

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

0グッド

1クリップ

投稿2018/08/12 14:08

前提・実現したいこと

Android StudioでJavaを使ってアプリを制作しております。

API 28のエミュレータでテストすると
SQLiteDatabase.openDatabaseのタイミングで
アプリが落ちてしまうエラーが発生します。

リリース済みのアプリのため、
今までは同じソースでも問題なく動いており、
またAPI 27までのエミュレータ・Android端末では
問題なく動くため、
理由がわからず困っております。

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

画面(MainActivity)のクリエイト時に、
SQLiteOpenHelperを使用して
assetsフォルダ内に入れたsample.db(テーブルやデータは既に入れてあります)を
開いています。
SQLiteDatabase.openDatabaseのタイミングでエラーが発生します。

  • MainActivityからの呼び出し(onCreate内)

Java

1 MyDatabaseHelper.CheckDataBase();
  • SQLiteOpenHelper関係

Java

1public class MyDatabaseHelper extends SQLiteOpenHelper { 2 3 private static File myFile; 4 5 6 //・・・・・・省略 7 8 MyDatabaseHelper(Context context) { 9 super(context, "sample.db", null, 1); 10 myFile = context.getDatabasePath("sample.db"); 11 } 12 13 //・・・・・・省略 14 15 public void CheckDataBase() throws IOException { 16 String dbPath = myFile.getAbsolutePath(); 17 SQLiteDatabase checkDb = null; 18 try { 19 checkDb = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READONLY); 20 } catch (SQLiteException e) { 21 Log.i("test", e.getMessage()); 22 } 23 } 24} 25
  • エラー内容

Java

1E/SQLiteLog: (14) cannot open file at line 36667 of [0c55d17973] 2 (14) os_unix.c:36667: (2) open(/(絶対パス)/sample.db) - 3E/SQLiteDatabase: Failed to open database '/(絶対パス)/sample.db'. 4 android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14 SQLITE_CANTOPEN): Could not open database 5 at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method) 6 at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:211) 7 at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:195) 8 at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:503) 9 at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:204) 10 at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:196) 11 at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:880) 12 at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:865) 13 at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:766) 14 at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:714) 15 at (パッケージ名).MyDatabaseHelper.CheckDataBase(MyDatabaseHelper.java:320) 16 at (パッケージ名).MainActivity.onCreate(MainActivity.java:244) 17 at android.app.Activity.performCreate(Activity.java:7136) 18 at android.app.Activity.performCreate(Activity.java:7127) 19 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) 20 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893) 21 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 22 at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 23 at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 24 at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 25 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 26 at android.os.Handler.dispatchMessage(Handler.java:106) 27 at android.os.Looper.loop(Looper.java:193) 28 at android.app.ActivityThread.main(ActivityThread.java:6669) 29 at java.lang.reflect.Method.invoke(Native Method) 30 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 31 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 32I/test: unknown error (code 14 SQLITE_CANTOPEN): Could not open database 33

試したこと

エミュレータは、
API 28のPixel及び
API 28のNexus 5Xで落ちます。

API 27のPixel及び
API 26のPixelでは動きます。

また、リリース後、特に大きなクラッシュの報告もないため、
自分でテストしている実機以外の端末でも
問題なく動いているのではと思います。

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

MacOS High Sierraにて制作
Android Studio 3.1.4

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/08/12 22:34

クラッシュの報告がないのかクラッシュの報告をする人がいないのかで後者かもよ?
nnnnn

2018/08/13 01:28

コメントありがとうございます、クラッシュの報告がなくても、実際はクラッシュしているのであれば、対応しなければと思います。 どういうタイミングでクラッシュしているのか見ることができれば対策を探せるのですが、Play consoleの方のエラー履歴にもあまり出てきていない状況です。他に報告無しでクラッシュしているかわかる方法などありますでしょうか。
guest

回答1

0

自己解決

ソースを見直したところ、
こちらに記載させていただいた内容自体は
問題がなかったということに気づきました、
見ていただいた方々、お手数おかけして申し訳ありません!
(今回記載した内容については、
API28以外でもエラーが発生する状態になっていました。
アプリとしてはここの時点でエラーが発生しても
問題がない作りにしていたのですが、
その点忘れてしまっていました…)

API28でテストをするとアプリが落ちるという現象は
やはり発生していたのですが、
発生箇所が今回記載させていただいた箇所とは異なっており、
また、以下の内容で修正することができました。

https://stackoverflow.com/questions/50476782/android-p-sqlite-no-such-table-error-after-copying-database-from-assets
上記urlを参考に、API28で発生することが多いエラーに対処することで、治すことができました。

具体的な内容としては、
アセットからデータベースのファイルをコピーして使っていたのですが、
コピー前にデータベースを開いたままにしていた事が原因でした。
(getReadableDatabase後にcloseすることで解決しました)

投稿2018/08/22 12:29

nnnnn

総合スコア26

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問