دانلود عکس با استفاده از progressbar در اندروید

یکشنبه 11 تیر 1396

در این مقاله قصد داریم یک سری عکس را با استفاده از یک دکمه از سرور دانلود نماییم به این صورت است که کاربر با زدن دکمه عکس ها را دانلود می کند و بعد از دانلود کردن آن را مایش می دهد.

دانلود عکس با استفاده از progressbar در اندروید

در این مقاله با استفاده از یک دکمه آدرس مورد نظر را که برای دانلود عکس است پیدا می کند البته حتما باید گوشی به نت وصل باشد بعد از آن با یک نوار پیشرفت درصد دانلود را نمایش می دهد و عکس مورد نظر را نمایش می دهد

ابتدا باید مجوز های دسترسی را قرار دهید:

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

کلاس جاوا به صورت زیر خواهد بود:

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://www.android-examples.com/wp-content/uploads/2016/04/demo_download_image.jpg" ;
 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.jpg");


 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.jpg";
 
 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;
 }
}

}

لایه ی 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"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/activity_vertical_margin"
 tools:context="com.downloadimageshowinghorizontalprogressbar_android_examples.com.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="Click here to Download image by showing horizontal progress bar dialog android programmatically" />

 <ImageView
 android:id="@+id/imageView1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentTop="true"
 android:layout_centerHorizontal="true"
 />

</RelativeLayout>

خروجی کار به صورت زیر است:

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید