2016-11-26 13 views
1

URLから画像を取得し、デバイスのメモリに保存します。私はこれでした:ファイルを作成するビットマップ6.0

new AsyncTask<String, Void, Bitmap>() { 
      protected Bitmap doInBackground(String... iUrl) { 
       Bitmap bitmap = null; 
       try { 
        URL url = new URL("http://lookw.ru/1/73/1380310809-pitstsa-ch1--16.jpg"); 
        bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
        String filepath = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator + "scetchpad"; 
        File dir = new File(filepath); 
        File file = new File(dir, "pizza.png"); 
        FileOutputStream fileOutputStream = new FileOutputStream(file); 
        bitmap.compress(Bitmap.CompressFormat.PNG, 85, fileOutputStream); 
        fileOutputStream.flush(); 
        fileOutputStream.close(); 
Log.d("LOGI", filepath); 


       } catch (Exception e) { 

        e.printStackTrace(); 
       } 
       return bitmap; 

      } 

      @Override 
      protected void onPostExecute(Bitmap bitmap) { 
       super.onPostExecute(bitmap); 
       ImageView imageView = (ImageView) findViewById(R.id.imageView); 
       assert imageView != null; 
       imageView.setImageBitmap(bitmap); 
      } 
     }.execute(); 

許可

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

私は持っている私のタブレット(アンドロイド4.1)が、私は自分の携帯電話でそれをテスト(小米科技ミ最大アンドロイド6.0)にこのコード作業いくつかの問題。

11-25 18:39:56.260 19383-19480/com.vkramarenko.myapplication W/System.err: java.io.FileNotFoundException: /storage/emulated/0/scetchpad/pizza.png: open failed: ENOENT (No such file or directory) 
11-25 18:39:56.260 19383-19480/com.vkramarenko.myapplication W/System.err:  at libcore.io.IoBridge.open(IoBridge.java:452) 
11-25 18:39:56.260 19383-19480/com.vkramarenko.myapplication W/System.err:  at java.io.FileOutputStream.<init>(FileOutputStream.java:87) 
11-25 18:39:56.260 19383-19480/com.vkramarenko.myapplication W/System.err:  at java.io.FileOutputStream.<init>(FileOutputStream.java:72) 
11-25 18:39:56.260 19383-19480/com.vkramarenko.myapplication W/System.err:  at com.vkramarenko.myapplication.MainActivity$1.doInBackground(MainActivity.java:47) 
11-25 18:39:56.261 19383-19480/com.vkramarenko.myapplication W/System.err:  at com.vkramarenko.myapplication.MainActivity$1.doInBackground(MainActivity.java:38) 
11-25 18:39:56.261 19383-19480/com.vkramarenko.myapplication W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:295) 
11-25 18:39:56.261 19383-19480/com.vkramarenko.myapplication W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
11-25 18:39:56.261 19383-19480/com.vkramarenko.myapplication W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
11-25 18:39:56.261 19383-19480/com.vkramarenko.myapplication W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
11-25 18:39:56.261 19383-19480/com.vkramarenko.myapplication W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
11-25 18:39:56.261 19383-19480/com.vkramarenko.myapplication W/System.err:  at java.lang.Thread.run(Thread.java:818) 
11-25 18:39:56.261 19383-19480/com.vkramarenko.myapplication W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 
11-25 18:39:56.261 19383-19480/com.vkramarenko.myapplication W/System.err:  at libcore.io.Posix.open(Native Method) 
11-25 18:39:56.262 19383-19480/com.vkramarenko.myapplication W/System.err:  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
11-25 18:39:56.262 19383-19480/com.vkramarenko.myapplication W/System.err:  at libcore.io.IoBridge.open(IoBridge.java:438) 
11-25 18:39:56.262 19383-19480/com.vkramarenko.myapplication W/System.err: ... 10 more 

そして私はまた、デバイスのメモリに(/ストレージ//0をエミュレートされた)このディレクトリが表示されていないが、いくつかのファイル(アプリのアイコン)は、このディレクトリに保存します。

+0

はそれが –

+0

'このディレクトリが表示されていない初期化した後' filepath'をログインしてくださいは、(/ストレージ//0をエミュレート)をデバイスのメモリに格納する。どのようにあなたは「見る」ことを試みているのですか?それはかなり正常な道です。それはそこにあります。 – greenapps

答えて

0

Android 6.0では、ファイルの保存または読み取りの実行時アクセス許可が必要です。以下のドキュメントをご覧ください。

https://developer.android.com/training/permissions/requesting.html

あなたは外部からこの権限を処理したくない場合、あなたは22またはそれ以下にtargetSdkVersion(build.gradleで)ファイルを変更することでこの問題を回避することができます。

defaultConfig { ----- targetSdkVersion 22 ------ }

関連する問題