دانلود عکس و نمایش Progressbar در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش دانلود عکس و نمایش Progressbar در برنامه نویسی اندروید می پردازیم آموزش های متعددی برای دانلود فایل در سایت قرار داده بودیم ولی امروز تصمیم گرفتیم یک آموزش کامل در این رابطه قرار دهیم پس عکس دانلود می شود و تا زمانی که عکس دانلودش تمام نشود یک progressbar برای کاربر به نمایش در می آید در ادامه با ما همراه باشید.
برای استفاده از این آموزش ابتدا باید دو دسترسی را در AndroidManifest.xml اضافه کنیم.
پس وارد آن شده و دسترسی زیر را اضافه کنید.
1 2 | <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |
پس از این که دسترسی ها را اضافه کردید وارد layout خود شده و کد زیر را در آن قرار دهید در پایین نام layout ما برابر با activity_main.xml است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <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 هم همانند زیر
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | 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://programchi.ir/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 نیز قرار می گیرد.
این آموزش هم به پایان رسید.
موفق و موید باشید.
سلام خیلی ببخشید میتونیم بجای لینک عکس یک لینک فایل قرار بدهیم؟؟
اونوقت قسمت Image view و button رو حذف کنیم؟
بله می شود باید نام فایل رو هم تغییر دهید ولی ممکن است فایلتون خطا بدهد آموزش های دیگر برای دانلود فایل قرار داده بودیم.
http://programchi.ir/2017/07/02/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%af%d8%a7%d9%86%d9%84%d9%88%d8%af-%d9%81%d8%a7%db%8c%d9%84-%d8%a7%d8%b2-%d9%88%d8%a8-%d8%b3%d8%b1%d9%88%d8%b1-%d8%af%d8%b1-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/
موفق باشید.
سلام من عکسام رو از سرور با پیکاسو لود میکنم تو ریسایکلر ویو و بعد فقط میتونم یک عکس دانلود کنم چون برای نام عکس ها چیزی درست نکردید که بصورت یک حلقه اسم عکس از یک شروع بشه تا به بالا ممنون میشم برای اینکه بشه همه ی عکساهارو دانلود کرد کدهاتون رو کامل تر کنید.
سپاس