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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

3081閲覧

Android 画像のパスの設定とデータベースへの保存ができない

sekaikan_ozaki

総合スコア65

Java

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

Android

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

Android Studio

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

0グッド

1クリップ

投稿2019/06/19 09:00

編集2019/06/19 13:33

PCスペック
Windows10 HOME 64bit
メモリ 32GB
プロセッサ Intel Core i7-8700CPU 3.20GHz
Android Studio 3.4.1(最新ver)
デモ用端末(XPERIA OS:7.0 API 24)

画像をスマホのストレージに保管しておいて、必要な時にあとから読み出したいのですが、うまくいくものとうまくいかないものがあります。同じコードを書いているのに結果が違う理由としてどんな原因が考えられるのでしょうか?

↓はうまくいきます(画像がCamera内に保存され、ファイルからURIの取得も問題なく可能)

java

1 // 保存先のフォルダーをカメラに指定した場合 2 File cameraFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),"Camera"); 3 4 5 // 保存ファイル名 6 fileName1 = new SimpleDateFormat("ddHHmmss", Locale.US).format(new Date());//データのフォーマット決め 7 filePath1 = String.format("%s/%s.png", cameraFolder.getPath(),fileName1);//画像ファイルの場所までの文字列(ファイルパス) 8 Log.d("debug","filePath1:" + filePath1); 9 10 // capture画像のファイルパス 11 File cameraFile = new File(filePath1); 12 13 registerDatabase(filePath1);//データベースへ登録 14 15 //ファイルからURIを取得 16 cameraUri = FileProvider.getUriForFile(MainActivity.this, getApplicationContext().getPackageName() + ".fileprovider", cameraFile);

しかし、↓のコードではCameraディレクトリ内にファイルが作成されておらず、そのせいでデータベースに画像も保存できていません。

java

1 2 // 保存先のフォルダーをカメラに指定した場合 3 File resultFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),"Camera"); 4 // 保存ファイル名 5 fileName2 = new SimpleDateFormat("yyyyMMdd_HH", Locale.US).format(new Date());//データのフォーマット決め 6 filePath2 = String.format("%s/%s.png", resultFolder.getPath(),fileName2);//画像ファイルの場所までの文字列(ファイルパス) 7 Log.d("debug","filePath2:" + filePath2); 8 9 registerDatabase(filePath2);//データベースへ登録 10 11 // capture画像のファイルパス 12 File resultFile = new File(filePath2); 13 //ファイルからURIを取得 14 resultUri = FileProvider.getUriForFile(MainActivity.this, getApplicationContext().getPackageName() + ".fileprovider", resultFile); 15 uploadImage(resultUri);

・追記
以下がデータベースへ登録するためのregisterDatabaseメソッドです。

java

1// アンドロイドのデータベースへ登録する 2 private void registerDatabase(String file) { 3 ContentValues contentValues = new ContentValues();//contentValuesインスタンスを作成 4 ContentResolver contentResolver = MainActivity.this.getContentResolver();// 5 contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");//ontecntValuesにキーと値を追加 6 contentValues.put("_data", file);//contentValuesにキーと値を追加//contentValuesにキーと値を追加 7 contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);//contentResolverに挿入 8 }

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

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

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

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

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

jimbe

2019/06/19 09:29

> Cameraディレクトリ内にファイルが作成されておらず 作成するコードには見えないのですが, registerDatabase 内でファイルの作成と登録をしているのでしょうか. 実行時に例外等は発生していませんか? また, この二つのコードの実行時の環境設定は如何でしょうか. パーミッション等も全く同じなのでしょうか.
sekaikan_ozaki

2019/06/19 13:30

コメントありがとうございます。 >作成するコードには見えないのですが, registerDatabase 内でファイルの作成と登録をしているのでしょうか. 失礼しました。registerDatabaseメソッドでスマホのストレージに保存しております。ただいま質問を編集し、そのメソッドを加筆させていただきます。 >実行時に例外等は発生していませんか? logcatを確認していますが、例外の発生はしておりません。 >この二つのコードの実行時の環境設定は如何でしょうか. パーミッション等も全く同じなのでしょうか. この2つのコードは同一プロジェクト&MainActivityクラス内に記述しております。 したがって、マニフェストファイルも同じですし、環境が全く同じと言って過言ではないという状況です・・・
sekaikan_ozaki

2019/06/20 01:09

jimbe様すみません!自己解決いたしました!
guest

回答1

0

自己解決

FileOutputStream output = new FileOutputStream(filePath2);
resultImage.compress(Bitmap.CompressFormat.JPEG, 100, output);
output.flush();

を途中に追記したところ、解決しました。

もともと用意していた画像resultImageがBitmap形式になっており、それをFileOutputStream&Bitmap.Compressを用いて、端末に「保存する」ことができたため、resultUriにちゃんと画像のデータを結びつけることができました。

投稿2019/06/20 01:14

sekaikan_ozaki

総合スコア65

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問