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

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

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

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

Java

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

Android

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

データベース

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

Q&A

0回答

1460閲覧

AndroidでSQLiteデータベースファイルのインポートがうまくいきません

gomao

総合スコア10

SQLite

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

Java

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

Android

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

データベース

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

0グッド

0クリップ

投稿2019/01/16 13:58

編集2019/01/18 14:20

前提・実現したいこと

AndroidアプリでSQLiteを利用しています。
DBファイル自体をエクスポート、インポートすることでバックアップする機能を持たせており、ソースコードの方法で実現しています。
これまではこの方法で問題なく処理できていたのですが、Android 9 でimportDBが機能しなくなりました。
dst.transferFrom(src, 0, src.size());
までは問題なく動いていることは確認しており、この行でもエラーが生じるわけではないのですが、ファイルの置き換えはなされずに終了してしまいます。
同じソースコードで今でもAndroid 8 以下では問題なく機能しています。
何が原因と考えられますでしょうか?
ご意見を頂戴できますと幸いです。

Android Studio 3.2.1
targetSdkVersion 28
minSdkVersion 14

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

エラーメッセージ

該当のソースコード

Java

1public class BackupAndRestore { 2 public static void importDB(Context context) { 3 try { 4 File sd = Environment.getExternalStorageDirectory(); 5 if (sd.canWrite()) { 6 File backupDB = context.getDatabasePath(DBHandler.getDBName()); 7 String backupDBPath = String.format("%s.bak", DBHandler.getDBName()); 8 File currentDB = new File(sd, backupDBPath); 9 10 FileChannel src = new FileInputStream(currentDB).getChannel(); 11 FileChannel dst = new FileOutputStream(backupDB).getChannel(); 12 dst.transferFrom(src, 0, src.size()); 13 src.close(); 14 dst.close(); 15 16 MyApplication.toastSomething(context, "Import Successful!"); 17 } 18 } catch (Exception e) { 19 e.printStackTrace(); 20 } 21 } 22 23 public static void exportDB(Context context) { 24 try { 25 File sd = Environment.getExternalStorageDirectory(); 26 File data = Environment.getDataDirectory(); 27 28 if (sd.canWrite()) { 29 String backupDBPath = String.format("%s.bak", DBHandler.getDBName()); 30 File currentDB = context.getDatabasePath(DBHandler.getDBName()); 31 File backupDB = new File(sd, backupDBPath); 32 33 FileChannel src = new FileInputStream(currentDB).getChannel(); 34 FileChannel dst = new FileOutputStream(backupDB).getChannel(); 35 dst.transferFrom(src, 0, src.size()); 36 src.close(); 37 dst.close(); 38 39 MyApplication.toastSomething(context, "Backup Successful!"); 40 } 41 } catch (Exception e) { 42 e.printStackTrace(); 43 } 44 } 45}

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してくださいとして3.

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問