0

インターネットから画像をダウンロードしようとしていて、画像がギャラリーに表示されない隠しフォルダにローカルに保存しようとしています。Androidのローカル隠しフォルダから画像と表示をダウンロードする

これは私のコードです。デバイスがインターネットに接続されている場合にのみ、イメージが表示されます。つまり、イメージはデバイスに保存されず、例外がスローされます。ここ

package com.example.adhish.downloadretriveimage; 

import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Environment; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 

/** 
* Created by appy-20 on 6/1/17. 
*/ 

public class ImageStorage { 


    public static String saveToSdCard(Bitmap bitmap, String filename) { 

     String stored = null; 

     File sdcard = Environment.getExternalStorageDirectory() ; 

     File folder = new File(sdcard.getAbsoluteFile(), ".test_directory");//the dot makes this directory hidden to the user 
     folder.mkdir(); 
     File file = new File(folder.getAbsoluteFile(), filename + ".jpg") ; 
     if (file.exists()) 
      return stored ; 

     try { 
      FileOutputStream out = new FileOutputStream(file); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
      out.flush(); 
      out.close(); 
      stored = "success"; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return stored; 
    } 

    public static File getImage(String imagename) { 

     File mediaImage = null; 
     try { 
      String root = Environment.getExternalStorageDirectory().toString(); 
      File myDir = new File(root); 
      if (!myDir.exists()) 
       return null; 

      mediaImage = new File(myDir.getPath() + "/.test_directory/"+imagename); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return mediaImage; 
    } 
    public static boolean checkifImageExists(String imagename) 
    { 
     Bitmap b = null ; 
     File file = ImageStorage.getImage("/"+imagename+".jpg"); 
     String path = file.getAbsolutePath(); 

     if (path != null) 
      b = BitmapFactory.decodeFile(path); 

     if(b == null || b.equals("")) 
     { 
      return false ; 
     } 
     return true ; 
    } 
} 

と私のMainActivity.javaです::私はすでに私のマニフェストでは、外部ストレージの読み取り書き込み権限を与えている

package com.example.adhish.downloadretriveimage; 

import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ImageView; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.net.URL; 
import java.net.URLConnection; 

public class MainActivity extends AppCompatActivity { 


    ImageView imageView; 
    Bitmap b; 
    String imagename; 
    String imgurl; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     imageView=(ImageView)findViewById(R.id.imageView); 

     imagename="394968_538b_7"; 
     imgurl="https://udemy-images.udemy.com/course/750x422/394968_538b_7.jpg"; 

     if(ImageStorage.checkifImageExists(imagename)) 
     { 
      File file = ImageStorage.getImage("/"+imagename+".jpg"); 

//   File file = ImageStorage.getImage("https://udemy-images.udemy.com/course/750x422/394968_538b_7.jpg"); 

      String path = file.getAbsolutePath(); 
      if (path != null){ 
       b = BitmapFactory.decodeFile(path); 
       imageView.setImageBitmap(b); 
      } 
     } else { 
      new GetImages(imgurl, imageView, imagename).execute() ; 
     } 
    } 

    private class GetImages extends AsyncTask<Object, Object, Object> { 
     private String requestUrl, imagename_; 
     private ImageView view; 
     private Bitmap bitmap; 
     private FileOutputStream fos; 

     private GetImages(String requestUrl, ImageView view, String _imagename_) { 
      this.requestUrl = requestUrl; 
      this.view = view; 
      this.imagename_ = _imagename_; 
     } 

     @Override 
     protected Object doInBackground(Object... objects) { 
      try { 
       URL url = new URL(requestUrl); 
       URLConnection conn = url.openConnection(); 
       bitmap = BitmapFactory.decodeStream(conn.getInputStream()); 
      } catch (Exception ex) { 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Object o) { 
      if (!ImageStorage.checkifImageExists(imagename_)) { 
       view.setImageBitmap(bitmap); 
       ImageStorage.saveToSdCard(bitmap, imagename_); 
      } 
     } 
    } 
} 

は、ここに私のImageStorageクラスです。

+0

はlogcat出力を表示します。 –

+0

@KNeerajLal 01-07 12:19:06.535 26907-26907/com.example.adhish.downloadretriveimage W/System.err:java.io.FileNotFoundException:394968_538b_7:オープンに失敗しました:EROFS(読み取り専用ファイルシステム) – Adhish

+0

実行時にアンドロイド6の権限を尋ねますか?ログを追加してパスをファイルにチェックすることはできますか?私はパスの中にエストラ "/"があることに気づいた。 – user5599807

答えて

関連する問題