دانلود عکس و نمایش Progressbar در برنامه نویسی اندروید

سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش دانلود عکس و نمایش Progressbar در برنامه نویسی اندروید می پردازیم آموزش های متعددی برای دانلود فایل در سایت قرار داده بودیم ولی امروز تصمیم گرفتیم یک آموزش کامل در این رابطه قرار دهیم پس عکس دانلود می شود و تا زمانی که عکس دانلودش تمام نشود یک progressbar برای کاربر به نمایش در می آید در ادامه با ما همراه باشید.
 
برای استفاده از این آموزش ابتدا باید دو دسترسی را در AndroidManifest.xml اضافه کنیم.
پس وارد آن شده و دسترسی زیر را اضافه کنید.

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

پس از این که دسترسی ها را اضافه کردید وارد layout خود شده و کد زیر را در آن قرار دهید در پایین نام layout ما برابر با activity_main.xml است.

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MainActivity" >
 <Button
 android:id="@+id/button1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_centerHorizontal="true"
 android:layout_marginTop="250dp"
 android:text="" />
 <ImageView
 android:id="@+id/imageView1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentTop="true"
 android:layout_centerHorizontal="true"
 />
</RelativeLayout>

همان طور که مشاهده کنیدیک دکمه و یک imageView قرار گرفته داده شده است.
و بخش MainActivity.java هم همانند زیر

package ir.programchi;
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
 Button button;
 ProgressDialog progressdialog;
 public static final int Progress_Dialog_Progress = 0;
 String ImageURL = "http://orjinakteb.com/wp-content/uploads/2017/08/progrmachiv1-min.png" ;
 URL url;
 URLConnection urlconnection ;
 int FileSize;
 InputStream inputstream;
 OutputStream outputstream;
 byte dataArray[] = new byte[1024];
 long totalSize = 0;
 ImageView imageview;
 String GetPath ;
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 button = (Button)findViewById(R.id.button1);
 imageview = (ImageView)findViewById(R.id.imageView1);
 button.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 new ImageDownloadWithProgressDialog().execute(ImageURL);
 }
 });
 }
public class ImageDownloadWithProgressDialog extends AsyncTask<String, String, String> {
 @Override
 protected void onPreExecute() {
 super.onPreExecute();
 showDialog(Progress_Dialog_Progress);
 }
 @Override
 protected String doInBackground(String... aurl) {
 int count;
 try {
 url = new URL(aurl[0]);
 urlconnection = url.openConnection();
 urlconnection.connect();
 FileSize = urlconnection.getContentLength();
 inputstream = new BufferedInputStream(url.openStream());
 outputstream = new FileOutputStream("/sdcard/demo_photo1.png");
 while ((count = inputstream.read(dataArray)) != -1) {
 totalSize += count;
 publishProgress(""+(int)((totalSize*100)/FileSize));
 outputstream.write(dataArray, 0, count);
 }
 outputstream.flush();
 outputstream.close();
 inputstream.close();
 } catch (Exception e) {}
 return null;
 }
 protected void onProgressUpdate(String... progress) {
 progressdialog.setProgress(Integer.parseInt(progress[0]));
 }
 @Override
 protected void onPostExecute(String unused) {
 dismissDialog(Progress_Dialog_Progress);
 GetPath = Environment.getExternalStorageDirectory().toString() + "/demo_photo1.png";
 imageview.setImageDrawable(Drawable.createFromPath(GetPath));
 Toast.makeText(MainActivity.this, "Image Downloaded Successfully", Toast.LENGTH_LONG).show();
 }
}
@Override
protected Dialog onCreateDialog(int id) {
 switch (id) {
 case Progress_Dialog_Progress:
 progressdialog = new ProgressDialog(MainActivity.this);
 progressdialog.setMessage("Downloading Image From Server...");
 progressdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
 progressdialog.setCancelable(false);
 progressdialog.show();
 return progressdialog;
 default:
 return null;
 }
}
}

زمانی که کد بالا را اجرا کنید یک progressdialog نمایش داده می شود و تا زمانی که فایل دانلود نشود نمایش ادامه پیدا می کند برای اینکه این بخش را هماهنگ کنیم از async استفاده کردیم این کلاس را قبلا توضیح داده بودیم کافی است در سایت واژه async را جستجو کنید و در بالا دقت کنید ما یک فایل با پسوند png دانلود کرده ایم در صورتی که پسوند فایل شما jpg بود آن را در دو بخش ذخیره تغییر دهید و بعد از اینکه عکس دانلود شد در حافظه به نام demo_photo1 ذخیره می شود و همینطور در IamgeView نیز قرار می گیرد.
 
این آموزش هم به پایان رسید.
 
موفق و موید باشید.

مطالعه بیشتر