質問編集履歴

2 Logcatを追記しました。

cray

cray score 27

2016/05/24 15:10  投稿

androidstudio 画像の保存
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,"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 03:49:39.778 2273-2273/com.example.masa_2.sumple D/MainActivity: 11111111111111111111
05-24 03:49:39.778 2273-2273/com.example.masa_2.sumple D/MainActivity: 2222222222222222222222222
05-24 03:49:39.778 2273-2273/com.example.masa_2.sumple D/MainActivity: 3333333333333
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple D/MainActivity: 7777777777777777777777
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Download/myfile.jpg: open failed: EACCES (Permission denied)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at libcore.io.IoBridge.open(IoBridge.java:452)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at java.io.FileOutputStream.<init>(FileOutputStream.java:127)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at com.example.masa_2.sumple.MainActivity.saveToFile(MainActivity.java:167)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at com.example.masa_2.sumple.MainActivity$2.onPostExecute(MainActivity.java:88)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at com.example.masa_2.sumple.MainActivity$2.onPostExecute(MainActivity.java:72)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.os.AsyncTask.finish(AsyncTask.java:651)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.os.AsyncTask.-wrap1(AsyncTask.java)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.os.Handler.dispatchMessage(Handler.java:102)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.os.Looper.loop(Looper.java:148)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.app.ActivityThread.main(ActivityThread.java:5417)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at java.lang.reflect.Method.invoke(Native Method)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at libcore.io.Posix.open(Native Method)
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
05-24 03:49:39.780 2273-2273/com.example.masa_2.sumple W/System.err:    at libcore.io.IoBridge.open(IoBridge.java:438)
05-24 03:49:39.780 2273-2273/com.example.masa_2.sumple W/System.err:    ... 15 more
05-24 03:49:40.909 2273-2273/com.example.masa_2.sumple I/Choreographer: Skipped 44 frames! The application may be doing too much work on its main thread.
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で保存、といった感じです。
わかる方いましたら是非ご教授願います。
  • Java

    18399 questions

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

  • Android Studio

    5015 questions

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

1 Logcatを追記しました。String path = filePath.getAbsolutePath();に変更しました。

cray

cray score 27

2016/05/24 12:58  投稿

androidstudio 画像の保存
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.getPath();
           String path = filePath.getAbsolutePath();
           Log.d(TAG,"2222222222222222222222222");
           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 03:49:39.778 2273-2273/com.example.masa_2.sumple D/MainActivity: 11111111111111111111  
05-24 03:49:39.778 2273-2273/com.example.masa_2.sumple D/MainActivity: 2222222222222222222222222  
05-24 03:49:39.778 2273-2273/com.example.masa_2.sumple D/MainActivity: 3333333333333  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple D/MainActivity: 7777777777777777777777  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Download/myfile.jpg: open failed: EACCES (Permission denied)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at libcore.io.IoBridge.open(IoBridge.java:452)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at java.io.FileOutputStream.<init>(FileOutputStream.java:87)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at java.io.FileOutputStream.<init>(FileOutputStream.java:127)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at java.io.FileOutputStream.<init>(FileOutputStream.java:116)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at com.example.masa_2.sumple.MainActivity.saveToFile(MainActivity.java:167)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at com.example.masa_2.sumple.MainActivity$2.onPostExecute(MainActivity.java:88)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at com.example.masa_2.sumple.MainActivity$2.onPostExecute(MainActivity.java:72)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.os.AsyncTask.finish(AsyncTask.java:651)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.os.AsyncTask.-wrap1(AsyncTask.java)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.os.Handler.dispatchMessage(Handler.java:102)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.os.Looper.loop(Looper.java:148)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at android.app.ActivityThread.main(ActivityThread.java:5417)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at java.lang.reflect.Method.invoke(Native Method)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at libcore.io.Posix.open(Native Method)  
05-24 03:49:39.779 2273-2273/com.example.masa_2.sumple W/System.err:    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)  
05-24 03:49:39.780 2273-2273/com.example.masa_2.sumple W/System.err:    at libcore.io.IoBridge.open(IoBridge.java:438)  
05-24 03:49:39.780 2273-2273/com.example.masa_2.sumple W/System.err:    ... 15 more  
05-24 03:49:40.909 2273-2273/com.example.masa_2.sumple I/Choreographer: Skipped 44 frames! The application may be doing too much work on its main thread.  
 
```
###試したこと
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で保存、といった感じです。
わかる方いましたら是非ご教授願います。
わかる方いましたら是非ご教授願います。
  • Java

    18399 questions

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

  • Android Studio

    5015 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る