Как сохранить загруженный файл на sdcard, а затем извлечь его?

#android #image

#Android #изображение

Вопрос:

В моей деятельности я загружаю изображения с URL. Я хочу, чтобы эти изображения загружались только в первый раз. Позже, когда я зайду на эту страницу, он должен взять изображение с sdcard. Как я могу это сделать? Кто-нибудь может помочь?

В манифесте я установил разрешение:

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

Метод, который я использую для загрузки, является:

 public static Bitmap downloadFileFromUrl(String fileUrl){

        URL myFileUrl =null;  
        Bitmap imageBitmap = null;

        try {
            myFileUrl= new URL(fileUrl);
        } 
        catch (MalformedURLException e) {
            e.printStackTrace();
        }

        try {
            HttpURLConnection connection= (HttpURLConnection)myFileUrl.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream is = connection.getInputStream();
            imageBitmap = BitmapFactory.decodeStream(is);

            //Below two lines I just tried out for saving to sd card.
            FileOutputStream out = new FileOutputStream(fileUrl);
            imageBitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
        } 
        catch (IOException e) {
            e.printStackTrace();
        }catch (Exception e) {
            e.printStackTrace();
        }

        return imageBitmap;
    }
  

Ответ №1:

Попробуйте этот метод

 public void DownloadImage(String imageUrl)      
    {
        InputStream is = null;
        if((imageUrl == null) || (imageUrl.length() == 0) || (imageUrl == " "))
        {
            System.out.println("No need to download images now");
        }
        else
        {
            System.gc();


            String[] items; 

            String ImageName = null;

            URL myFileUrl =null; 
            Bitmap bmImg = null;

            String path = IMAGE_DOWNLOAD_PATH;

            FileOutputStream outStream = null;
            File file = new File(path);

            if(!file.exists())
            {
                file.mkdirs();  
            }

            File outputFile;
            BufferedOutputStream bos;

                try {   
                    myFileUrl= new URL(imageUrl.trim());

                    HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
                    conn.setRequestMethod("GET");

                    conn.setDoInput(true);
                    conn.setConnectTimeout(20000);
                    conn.connect();

                    is = conn.getInputStream();


            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                    e.printStackTrace();
                }



                 ImageName = getImageName(imageUrl);

                 try {
                     outputFile = new File(file, ImageName);

                     if(outputFile.exists())                
                     {
                         System.out.println("No need to download image it already exist");
                         outputFile.delete();
                     }
                         outputFile.createNewFile();

                         outStream = new FileOutputStream(outputFile);
                         //bos = new BufferedOutputStream(outStream);
                         BufferedInputStream bis = new BufferedInputStream(is);

                            ByteArrayBuffer baf = new ByteArrayBuffer(50);

                            int current = 0;
                            while ((current = bis.read()) != -1) 
                            {
                                baf.append((byte) current);
                            }

                            outStream.write(baf.toByteArray());
                            outStream.close();




                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }   
        }

    }
  

а затем для извлечения изображения с sdcard,

 File extStore = Environment.getExternalStorageDirectory();
        String file_path = "/(folder name)/" "(image name)".trim() ".extension".trim();

        String mypath = extStore   file_path;
        Bitmap bmp=BitmapFactory.decodeFile(mypath);
ImageView image = (ImageView) v.findViewById(R.id.image);
        image.setImageBitmap(bmp);
  

Ответ №2:

Вы должны где-то хранить то, что у вас есть в кэше.

Или, если ваше имя файла уникально, вы должны проверить, существует файл или нет.

Ответ №3:

Вы должны записать данные, полученные из InputStream, в указанное местоположение SD-карты..