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

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

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

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

Android Studio

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

Q&A

解決済

2回答

4176閲覧

androidstudio 画像の保存

cray

総合スコア29

Java

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

Android Studio

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

0グッド

0クリップ

投稿2016/05/24 01:20

編集2016/05/24 06:10

androidstudioで画像ダウンロードアプリを作成しています。
URLを入力したらそのURLの画像をダウンロード、画面に表示し、Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
に保存をするアプリです。

画像を画面に表示することはできたのですが、保存することができません。
以下、画像を保存するための関数です。
入力したURLをbitmapでダウンロードし、そのbitmapをこの関数の引数に渡しています。

###該当のソースコード

public void saveToFile(Bitmap bit) { try { File filePath = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"myfile.jpg"); Log.d(TAG,"11111111111111111111"); String path = filePath.getAbsolutePath(); Log.d(TAG,"2222222222222222222222222") Log.d(TAG, "External: " +Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) ); FileOutputStream output = null; Log.d(TAG,"3333333333333"); output = new FileOutputStream(path); Log.d(TAG,"4444444444444444444"); bit.compress(Bitmap.CompressFormat.JPEG, 100, output); Log.d(TAG,"555555555555555555555"); output.close(); Log.d(TAG,"66666666666666666666666"); } catch (Exception e) { Log.d(TAG,"7777777777777777777777"); e.printStackTrace(); } }

###Logcat

05-24 06:09:12.145 2621-2621/com.example.masa_2.sumple D/MainActivity: 11111111111111111111 05-24 06:09:12.145 2621-2621/com.example.masa_2.sumple D/MainActivity: 2222222222222222222222222 05-24 06:09:12.146 2621-2621/com.example.masa_2.sumple D/MainActivity: External: /storage/emulated/0/Download 05-24 06:09:12.146 2621-2621/com.example.masa_2.sumple D/MainActivity: 3333333333333 05-24 06:09:12.147 2621-2621/com.example.masa_2.sumple D/MainActivity: 7777777777777777777777 05-24 06:09:12.147 2621-2621/com.example.masa_2.sumple W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Download/myfile.jpg: open failed: EACCES (Permission denied) 05-24 06:09:12.147 2621-2621/com.example.masa_2.sumple W/System.err: at libcore.io.IoBridge.open(IoBridge.java:452) 05-24 06:09:12.147 2621-2621/com.example.masa_2.sumple W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:87) 05-24 06:09:12.147 2621-2621/com.example.masa_2.sumple W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:127) 05-24 06:09:12.147 2621-2621/com.example.masa_2.sumple W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:116) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at com.example.masa_2.sumple.MainActivity.saveToFile(MainActivity.java:168) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at com.example.masa_2.sumple.MainActivity$2.onPostExecute(MainActivity.java:88) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at com.example.masa_2.sumple.MainActivity$2.onPostExecute(MainActivity.java:72) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at android.os.AsyncTask.finish(AsyncTask.java:651) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at android.os.AsyncTask.-wrap1(AsyncTask.java) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at android.os.Looper.loop(Looper.java:148) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at java.lang.reflect.Method.invoke(Native Method) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at libcore.io.Posix.open(Native Method) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: at libcore.io.IoBridge.open(IoBridge.java:438) 05-24 06:09:12.148 2621-2621/com.example.masa_2.sumple W/System.err: ... 15 more 05-24 06:09:13.184 2621-2621/com.example.masa_2.sumple I/Choreographer: Skipped 38 frames! The application may be doing too much work on its main thread. 05-24 06:09:13.846 1646-1836/system_process W/art: Long monitor contention event with owner method=void com.android.server.wm.WindowAnimator$1.doFrame(long) from WindowAnimator.java:121 waiters=0 for 319ms 05-24 06:09:14.209 1646-1836/system_process W/art: Long monitor contention event with owner method=void com.android.server.wm.WindowAnimator$1.doFrame(long) from WindowAnimator.java:121 waiters=0 for 362ms 05-24 06:09:14.579 1646-1836/system_process W/art: Long monitor contention event with owner method=void com.android.server.wm.WindowAnimator$1.doFrame(long) from WindowAnimator.java:121 waiters=0 for 370ms

###試したこと
Log.dでどこまで実行されているのかを調べました。
このコードですと
Log.d(TAG,"3333333333333");
まで実行されます。
output = new FileOutputStream(path);
の文で例外が発生していると思われます。

原因がわかりますでしょうか?

パーミッションは

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

を許可しています。

###補足情報(言語/FW/ツール等のバージョンなど)
開発環境はandroidstudio2.1
エミュレータ nexus7 APIレベルは23です。

それと、保存するファイル名についてなのですが、このコードではとりあえずmyfile.jpgとなっています。
保存するファイルの名前を入力した画像のURLの画像ファイル名と同じにしたいのですがやり方がわかりません。


http://aaaaaaaaa/image.jpg
ならimage.jpgで保存、といった感じです。

わかる方いましたら是非ご教授願います。

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

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

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

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

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

guest

回答2

0

ベストアンサー

追記されたLogcatを見た感じ
open failed: EACCES (Permission denied)
パーミッション(アプリの権限)が足りずに開けていないように見えます。

APIレベル23 Android Mで開発されているようなので、ストレージのアクセス権限がついていない可能性があるかと

端末の
設定>アプリ>"作成している画像ダウンロードアプリ">許可
をタップしてください。

「ストレージ」の項目がONになっていますでしょうか。
ONであれば、FileOutputStreamでのPermission deniedは出ないかと思われます。

投稿2016/05/24 12:51

mocomoco

総合スコア54

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

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

cray

2016/05/25 01:30

ご回答ありがとうございます。ストレージの設定が許可になっていませんでした。 許可したところ問題なく動くことを確認できました!ありがとうございます! 保存した画像なのですが、InstallStrsgeのDownloadに保存されていることが確認できました。 保存した画像が小さいアイコンで表示されているのですが、白く表示されていて、そのアイコンをタップしても画像の原寸大の大きさで表示がされません。 この原因もandroidの設定がどこかおかしいのでしょうか?
mocomoco

2016/05/25 11:25

現象から考えてとりあえずAndroidの設定がおかしいわけではなさそうです。 保存する処理は大丈夫そうなので、saveToFile()に渡しているダウンロードしたbitmapデータが怪しいかなと Bitmap画像をダウンロードしてsaveToFileに渡すところあたりのコードを追記してもらえるとわかる方がいるかもしれません。 ※保存とは別件になりそうなので新たに質問を立てるのもアリかもしれません。
cray

2016/05/30 00:19

質問と関係ないところまで回答いただきありがとうございます!また新たに質問を投稿するかもしれません。今回は解決に導いていただきありがとうございました!
guest

0

filePath.getPath()ではなくfilePath.getAbsolutePath()にすべきではないでしょうか。

・エラーに関する質問の場合はログキャットも記述すべきだと思います。
・Logにパスを出力してみてください。

投稿2016/05/24 02:42

yona

総合スコア18155

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

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

cray

2016/05/24 03:58

String path = filePath.getAbsolutePath();に変更しても変化はありませんでした・・・。 Logcatを追記しました。
yona

2016/05/24 06:10

ファイルが無い時はストリームを作成することはできません。 先に、File#createNewFileをすると良いでしょう。
cray

2016/05/25 01:23

File filePath = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"myfile.jpg"); で、ファイルを新しく作っていると思うのですがこの表記ではおかしいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問