نمایش یک عکس قرار گرفته در اینترنت (یک آدرس URL)، در یک ImageView ، در برنامه نویسی اندروید
فرض کنید که یک عکس در اینترنت قرار دارد و می خواهیم آن را در یک ImageView در برنامه اندروید خود نمایش بدهیم. آدرس اینترنتی (آدرس URL) عکس را به صورت آدرس فرضی زیر در نظر بگیرید (این آدرس را به آدرس URL مورد نظر خود تغییر بدهید) :
ابتدا یک تابع به صورت زیر تعریف می کنیم :
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
سپس با فرض اینکه ImageView ای که می خواهیم عکس در آن نمایش داده شود، دارای id برابر imageView1 باشد، کدهای زیر را می نویسیم (آدرس URL در کدها را به آدرس URL مورد نظر خود تغییر بدهید) :
new DownloadImageTask(imageView).execute("http://www.kelidestan.com/images/image.png");
دقت کنید که حتما باید اجازه دسترسی به اینترنت، به برنامه اندروید افزوده شود، بنابراین فایل AndroidManifest.xml پروژه اندروید را باز کرده و کد زیر را به آن اضافه می کنیم (افزودن اجازه دسترسی به اینترنت) :
بد نیست تذکر داده شود که برای بارگذاری عکس از اینترنت و سپس نمایش آن در ImageView ، از AsyncTask استفاده کرده ایم. بهتر است که در فایل xml ای که ImageView را تعریف کرده اید، ابتدا یک عکس پیش فرض تعیین کنید تا در حین بارگذاری عکس از اینترنت، در ImageView نمایش داده شود و بعد از بارگذاری عکس از اینترنت، عکس اینترنتی در ImageView نمایش داده می شود.
سلام. ممنون از مطالبی که میذارید اما واقعا چرا توضیحشون نمیدید؟ این که از متن اصلی هم کمتره ! بهترین روش آموزش اینه که یا آموزش خط به خط بدید و یا در جایی که قبلا توضیح داده شده به مطلب قبلی رفرنس بدید! الان تو این آموزش من اصل کد رو میفهمم ولی تو این قالب کلاس که گذشاتید نمیفهمم که چرا اینچوری کلاس تعریف شده چرا از AsyncTask<String, Void, Bitmap> اکستند شده و فایده اش چیه؟ توابع داخلش چیکار میکنن و ربطشون با هم چیه و به طور کلی اجرا برنامه از کجا شروع میشه و کجا تموم میشه !!! توی آموزش های دیگه اتون هم همین مشکل بود لطفا صرف مترجم نباشید و از معلومات خودتون هم برای توضیح بشتر استفاده کنید
با تشکر
سلام.
AsyncTask برای اجرای کدهایی به کار می رود که نمی دانیم مدت زمان اجرای آنها چقدر طول می کشد و بنابراین کد آن در یک thread ای غیر از thread اصلی برنامه اجرا می شود (در پس زمینه اجرا می شوند).
معمولا اطلاعات دریافتی از اینترنت، توسط AsyncTask دریافت می شوند (به دلیل متغیر بودن سرعت اینترنت و ...).
در روش doInBackground ، کد اصلی که زمان بر است، اجرا می شود و هنگامی که اجرای آن پایان یابد، نتیجه به روش onPostExecute ارسال می شود و بنابراین کدهای پایانی که می خواهیم بعد از اجرای کد زمان بر، اجرا شوند را در روش onPostExecute می نویسیم.
خیلی ممنون
سلام و تشکر از مطالب خوبتون
من به روش گفته شده عکس رو دانلود و نمایش میدم فقط یه مشکلی هست.. اگر عکس رو در سرور عوض کنم گاهی یکی دو روز طول میکشه تا در برنامه عوض بشه!!! آیا این مسئله مربوط به network cash (کش اینترنت مورد استفاده) هست؟ و راهکار چیه؟؟؟
سلام سلطان ببین وقتی که عکس رو از سرور تغییر بدی طرف وقتی داخل برنامه اینترنت رو روشن کنه عکسه عوض میشه
سلام مهندس
تابع را در کجا تعریف میکنیم
سلام و خدا قوت
برای بنده سوال هست که اگر کسی برای رفع اشکال از برنامه اندرویدی خودش از کدهایی که شما در سایت برای رفع مشکل ارائه میکنید استفاده کند خوب در حکم کپی از سایت محسوب می شود. در حالی که در مقررات سایت شما اجازه کپی کردن نداده اید. لطفا این موضوع را شفاف نمایید. متشکرم
سلام.
منظور از کپی برداری، کپی کردن متن آموزشی و کدها به صورت آموزش می باشد، یعنی مثلا یک وب سایت آموزشی دیگر، کپی آموزش های کلیدستان را منتشر می کند و بنابراین حقوق وب سایت کلیدستان ضایع می شود.
اما کاربران سایت کلیدستان می توانند استفاده شخصی از محتوا داشته باشند، یعنی مستقیما کدها را در پروژه خود کپی کرده و از آن استفاده نمایند.