title: How to Download Video File From server and Save Sd Card?
body: <p>i develop downloading app and when I click the save button then download process in back ground but button click not show right position .I have listView in which I inflate a row contain Imageview and button and progressbar now I want to handle click event of button which coded in adapter and I am able to get the position of button too. But here when I click on button I am changing a image of button its works fine problem is when I scroll the view it again change the image of button as it was before because of getview() Method its recycle view every time.and how to all Download video and save sd card. my code below::</p>
  
  <pre><code>public class TestHopeListNew extends Activity {
      ListView lv;
      ArrayList&lt;Url_Dto&gt; list = new ArrayList&lt;Url_Dto&gt;();
      MyListAdapter adtf;
      public static String prf_date_view = "";
      String str_start;
      Button mainDownloadBtn;
      public static SQLiteDatabase db;
      ProgressBar freePr;
      String name;
      File download;
      int i = 0;
      private ArrayList&lt;ProgressBarSeek&gt; progreeSeekList;
  
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_test_hope_list_new);
          progreeSeekList = new ArrayList&lt;ProgressBarSeek&gt;();
          list = DBAdapter.getUrl_Detail();
          Log.v("log_tag", "list  :: " + list.size());
          lv = (ListView) findViewById(R.id.main_list_meet);
          mainDownloadBtn = (Button) findViewById(R.id.not_shown);
          freePr = (ProgressBar) findViewById(R.id.progressBar1);
          adtf = new MyListAdapter(this);
          lv.setAdapter(adtf);
          //adtf.notifyDataSetChanged();
          SqliteAdpter dba = SqliteAdpter
                  .getAdapterInstance(getApplicationContext());
          dba.createdatabase();
          db = dba.openDataBase();
          BusyExtMemory();
          mainDownloadBtn.setOnClickListener(new View.OnClickListener() {
  
              @Override
              public void onClick(View v) {
                  adtf.setAllDownload();
              }
          });
  
      }
  
      public class MyListAdapter extends BaseAdapter {
          private LayoutInflater mInflater;
          ProgressBar pr;
          ProgressBar[] prArray = new ProgressBar[list.size()];
          Button cl, dl;
          ImageView im;
          DownloadFileFromURL downloadFileFromURL;
  
  
          public MyListAdapter(Context context) {
              mInflater = LayoutInflater.from(context);
  
          }
  
          public int getCount() {
              return list.size();
          }
  
          public Object getItem(int position) {
              return list.get(position);
          }
  
          public long getItemId(int position) {
              return position;
          }
  
          public void setAllDownload() {
              if (prArray.length &gt; 0) {
                  for (int i = 0; i &lt; prArray.length; i++) {
                      try {
                          Thread.sleep(4000);
                      } catch (InterruptedException e) {
                          e.printStackTrace();
                      }
  
                      Log.v("log_tag", "list.get(i).url_video   "
                              + list.get(i).url_video);
  
                      downloadFileFromURL.execute(pr, list.get(i).url_video, i);
                  }
              }
          }
  
          public View getView(final int position, View convertView,
                  ViewGroup parent) {
              convertView = mInflater.inflate(R.layout.custome_list_view, null);
  
              cl = (Button) convertView.findViewById(R.id.cancle_sedual);
              dl = (Button) convertView.findViewById(R.id.download_sedual);
              pr = (ProgressBar) convertView.findViewById(R.id.listprogressbar);
              prArray[position] = pr;
              im = (ImageView) convertView.findViewById(R.id.list_image);
              im.setImageResource(list.get(position).images[position]);
  
  
              downloadFileFromURL = new DownloadFileFromURL(dl, cl);
              cl.setOnClickListener(new View.OnClickListener() {
  
                  @Override
                  public void onClick(View v) {
                      Log.v("log_tag", "Cancle Button Click");
  
                      dl.setVisibility(View.VISIBLE);
                      cl.setVisibility(View.GONE);
                      downloadFileFromURL.cancel(true);
                       downloadFileFromURL.downloadFile();
                      pr.setProgress(0);
                  }
              });
  
              dl.setOnClickListener(new View.OnClickListener() {
  
                  @Override
                  public void onClick(View v) {
  
                      str_start = list.get(position).url_video;
                      dl.setVisibility(View.GONE);
                      cl.setVisibility(View.VISIBLE);
                      Log.v("log_tag", "Start Button Click ");
                      //downloadFileFromURL = new DownloadFileFromURL(dl, cl);
                      downloadFileFromURL.execute(pr, str_start, position);
                  }
              });
              getProgress(pr, position, dl, cl);
              return convertView;
          }
  
      }
  
      class DownloadFileFromURL extends AsyncTask&lt;Object, String, Integer&gt; {
  
          int count = 0;
          ProgressDialog dialog;
          ProgressBar progressBar;
          int myProgress;
          int position;
          Button start, cancel;
          boolean download1 = false;
  
          public DownloadFileFromURL(Button start, Button cancel) {
              this.start = start;
              this.cancel = cancel;
          }
  
          /**
           * Before starting background thread Show Progress Bar Dialog
           * */
  
          @Override
          protected void onPreExecute() {
              super.onPreExecute();
              ProgressBar progressBar;
              download1 = true;
  
          }
  
          public void downloadFile() {
              this.download1 = false;
  
          }
  
          @Override
          protected void onCancelled() {
              super.onCancelled();
  
          }
  
          /**
           * Downloading file in background thread
           * */
          @Override
          protected Integer doInBackground(Object... params) {
              int count;
              progressBar = (ProgressBar) params[0];
              position = (Integer) params[2];
              /*
               * try { Thread.sleep(500); } catch (InterruptedException e) {
               * e.printStackTrace(); }
               */
              try {
  
                  URL url = new URL((String) params[1]);
  
                  name = ((String) params[1]).substring(((String) params[1])
                          .lastIndexOf("/") + 1);
                  // Log.v("log_tag", "name Substring ::: " + name);
                  URLConnection conection = url.openConnection();
                  conection.connect();
                  // getting file length
                  int lenghtOfFile = conection.getContentLength();
  
                  // input stream to read file - with 8k buffer
                  InputStream input = new BufferedInputStream(url.openStream(),
                          8192);
                  download = new File(Environment.getExternalStorageDirectory()
                          + "/download/");
                  if (!download.exists()) {
                      download.mkdir();
                  }
                  String strDownloaDuRL = download + "/" + name;
                  Log.v("log_tag", " down url   " + strDownloaDuRL);
                  FileOutputStream output = new FileOutputStream(strDownloaDuRL);
  
                  byte data[] = new byte[1024];
  
                  long total = 0;
  
                  while ((count = input.read(data)) != -1) {
                      if (this.download1) {
                          if (isCancelled()) {
                              break;
                          }
  
                          total += count;
  
                          // writing data to file
                          progressBar
                                  .setProgress((int) ((total * 100) / lenghtOfFile));
                          output.write(data, 0, count);
                          setProgress(progressBar, position, start, cancel, this);
                      } else {
                          File delete = new File(strDownloaDuRL);
                          delete.delete();
                      }
                  }
                  // flushing output
                  output.flush();
  
                  // closing streams
                  output.close();
                  input.close();
  
              } catch (Exception e) {
                  Log.e("Error: ", e.getMessage());
              }
              return 0;
  
          }
  
          /**
           * Updating progress bar
           * */
          protected void onProgressUpdate(String... values) {
  
              super.onProgressUpdate(values);
              BusyExtMemory();
  
              // pDialog.setProgress(Integer.parseInt(progress[0]));
          }
  
          /**
           * After completing background task Dismiss the progress dialog
           * **/
          protected void onPostExecute(String file_url) {
  
              Log.v("log", "login  ::: 4::: " + download);
              String videoPath = download + "/" + name;
              String chpName = name;
              Log.v("log_tag", "chpName  ::::" + chpName + "  videoPath "
                      + videoPath);
              db.execSQL("insert into videoStatus (chapterNo,videoPath) values(\""
                      + chpName + "\",\"" + videoPath + "\" )");
  
          }
  
      }
  
      private void setProgress(final ProgressBar pr, final int position,
              final Button Start, final Button cancel,
              final DownloadFileFromURL downloadFileFromURL) {
          ProgressBarSeek pbarSeek = new ProgressBarSeek();
          pbarSeek.setPosition(position);
          pbarSeek.setProgressValue(pr.getProgress());
          // Log.v("log_tag", position + "  progress  " + pr.getProgress());
          progreeSeekList.add(pbarSeek);
          cancel.setOnClickListener(new OnClickListener() {
  
              @Override
              public void onClick(View v) {
  
                  Log.v("log_tag", "Cancle Button Click Set progress");
                  Start.setVisibility(View.VISIBLE);
                  cancel.setVisibility(View.GONE);
                  downloadFileFromURL.cancel(true);
                  // downloadFileFromURL.downloadFile();
                  downloadFileFromURL.cancel(true);
                  pr.setProgress(0);
  
              }
          });
          Start.setOnClickListener(new OnClickListener() {
  
              @Override
              public void onClick(View v) {
                  Log.v("log_tag", "Start Button Click set Progress");
                  str_start = list.get(position).url_video;
                  Start.setVisibility(View.GONE);
                  cancel.setVisibility(View.VISIBLE);
                  Log.v("log_tag", "str_start  " + str_start);
                  //
                  // new DownloadFileFromURL().execute(str_start);
                  DownloadFileFromURL downloadFileFromU = new DownloadFileFromURL(
                          Start, cancel);
                  downloadFileFromU.execute(pr, str_start, position);
              }
          });
      }
  
      private void getProgress(ProgressBar pr, int position, Button dl, Button cl) {
          if (progreeSeekList.size() &gt; 0) {
              for (int j = 0; j &lt; progreeSeekList.size(); j++) {
                  if (position == progreeSeekList.get(j).getPosition()) {
                      pr.setProgress(progreeSeekList.get(j).getProgressValue());
                      dl.setVisibility(View.GONE);
                      cl.setVisibility(View.VISIBLE);
                  }
              }
          }
      }
  
      public String TotalExtMemory() {
          StatFs statFs = new StatFs(Environment.getExternalStorageDirectory()
                  .getAbsolutePath());
          int Total = (statFs.getBlockCount() * statFs.getBlockSize()) / 1048576;
          Log.v("log_tag", "TotalExtMemory    " + Total);
          String strI = Integer.toString(Total);
          return strI;
      }
  
      public String FreeExtMemory() {
          StatFs statFs = new StatFs(Environment.getExternalStorageDirectory()
                  .getAbsolutePath());
          int Free = (statFs.getAvailableBlocks() * statFs.getBlockSize()) / 1048576;
          String strI = Integer.toString(Free);
          Log.v("log_tag", "FreeExtMemory    " + strI);
  
          return strI;
      }
  
      public String BusyExtMemory() {
          StatFs statFs = new StatFs(Environment.getExternalStorageDirectory()
                  .getAbsolutePath());
          int Total = (statFs.getBlockCount() * statFs.getBlockSize()) / 1048576;
          int Free = (statFs.getAvailableBlocks() * statFs.getBlockSize()) / 1048576;
          int Busy = Total - Free;
          String strI = Integer.toString(Busy);
          freePr.setProgress(Integer.parseInt(strI));
          Log.v("log_tag", "BusyExtMemory    " + strI);
          return strI;
      }
  }
  </code></pre>
  
  <p>My Screen Shot Demo Display::<img src="https://i.stack.imgur.com/YuSrm.png" alt="enter image description here"></p>