Android - Save image from URL onto SD card

后端 未结 7 1284
太阳男子
太阳男子 2020-11-28 07:37

I want to save an image from a URL to the SD card (for future use) and then load that image from the SD card to use it as a drawable overlay for Google maps.

Here is

相关标签:
7条回答
  • 2020-11-28 08:32

    I also faced the same issue and resolved mine with this. Try this

    private class ImageDownloadAndSave extends AsyncTask<String, Void, Bitmap>
            {
                @Override
                protected Bitmap doInBackground(String... arg0) 
                {           
                    downloadImagesToSdCard("","");
                    return null;
                }
    
                   private void downloadImagesToSdCard(String downloadUrl,String imageName)
                    {
                        try
                        {
                            URL url = new URL(img_URL); 
                            /* making a directory in sdcard */
                            String sdCard=Environment.getExternalStorageDirectory().toString();     
                            File myDir = new File(sdCard,"test.jpg");
    
                            /*  if specified not exist create new */
                            if(!myDir.exists())
                            {
                                myDir.mkdir();
                                Log.v("", "inside mkdir");
                            }
    
                            /* checks the file and if it already exist delete */
                            String fname = imageName;
                            File file = new File (myDir, fname);
                            if (file.exists ()) 
                                file.delete (); 
    
                                 /* Open a connection */
                            URLConnection ucon = url.openConnection();
                            InputStream inputStream = null;
                            HttpURLConnection httpConn = (HttpURLConnection)ucon;
                            httpConn.setRequestMethod("GET");
                            httpConn.connect();
    
                              if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) 
                              {
                               inputStream = httpConn.getInputStream();
                              }
    
                                FileOutputStream fos = new FileOutputStream(file);  
                    int totalSize = httpConn.getContentLength();
                            int downloadedSize = 0;   
                            byte[] buffer = new byte[1024];
                            int bufferLength = 0;
                            while ( (bufferLength = inputStream.read(buffer)) >0 ) 
                            {                 
                              fos.write(buffer, 0, bufferLength);                  
                              downloadedSize += bufferLength;                 
                              Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ;
                            }   
    
                                fos.close();
                                Log.d("test", "Image Saved in sdcard..");                      
                        }
                        catch(IOException io)
                        {                  
                             io.printStackTrace();
                        }
                        catch(Exception e)
                        {                     
                            e.printStackTrace();
                        }
                    }           
            } 
    

    Declare your network operations in AsyncTask as it will load it as a background task. Don't load network operation on main thread. After this either in button click or in content view call this class like

     new ImageDownloadAndSave().execute("");
    

    And don't forget to add the nework permission as:

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

    Hope this may help someone :-)

    0 讨论(0)
提交回复
热议问题