آموزش برنامه نویسی اندروید (Android)
۴۱۹ آموزش
نمایش دسته بندی ها (۴۱۹ آموزش)

نمایش یک عکس قرار گرفته در اینترنت (یک آدرس URL)، در یک ImageView ، در برنامه نویسی اندروید

فرض کنید که یک عکس در اینترنت قرار دارد و می خواهیم آن را در یک ImageView در برنامه اندروید خود نمایش بدهیم. آدرس اینترنتی (آدرس URL) عکس را به صورت آدرس فرضی زیر در نظر بگیرید (این آدرس را به آدرس URL مورد نظر خود تغییر بدهید) :


http://www.kelidestan.com/images/image.png

ابتدا یک تابع به صورت زیر تعریف می کنیم :


private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    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 مورد نظر خود تغییر بدهید) :


ImageView imageView = (ImageView) findViewById(R.id.imageView1);
new DownloadImageTask(imageView).execute("http://www.kelidestan.com/images/image.png");

دقت کنید که حتما باید اجازه دسترسی به اینترنت، به برنامه اندروید افزوده شود، بنابراین فایل AndroidManifest.xml پروژه اندروید را باز کرده و کد زیر را به آن اضافه می کنیم (افزودن اجازه دسترسی به اینترنت) :


<uses-permission android:name="android.permission.INTERNET" />
نکته

بد نیست تذکر داده شود که برای بارگذاری عکس از اینترنت و سپس نمایش آن در ImageView ، از AsyncTask استفاده کرده ایم. بهتر است که در فایل xml ای که ImageView را تعریف کرده اید، ابتدا یک عکس پیش فرض تعیین کنید تا در حین بارگذاری عکس از اینترنت، در ImageView نمایش داده شود و بعد از بارگذاری عکس از اینترنت، عکس اینترنتی در ImageView نمایش داده می شود.

نویسنده علیرضا گلمکانی
شماره کلید 294
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 9 8 1
علیرضا
۱۳۹۵/۰۴/۱۰
۱۲:۲۱

سلام. ممنون از مطالبی که میذارید اما واقعا چرا توضیحشون نمیدید؟ این که از متن اصلی هم کمتره ! بهترین روش آموزش اینه که یا آموزش خط به خط بدید و یا در جایی که قبلا توضیح داده شده به مطلب قبلی رفرنس بدید! الان تو این آموزش من اصل کد رو میفهمم ولی تو این قالب کلاس که گذشاتید نمیفهمم که چرا اینچوری کلاس تعریف شده چرا از AsyncTask<StringVoid, Bitmap>  اکستند شده و فایده اش چیه؟ توابع داخلش چیکار میکنن و ربطشون با هم چیه و به طور کلی اجرا برنامه از کجا شروع میشه و کجا تموم میشه !!! توی آموزش های دیگه اتون هم همین مشکل بود لطفا صرف مترجم نباشید و از معلومات خودتون هم برای توضیح بشتر استفاده کنید
با تشکر

admin
۱۳۹۵/۰۴/۱۱
۲۱:۳۶

سلام.
AsyncTask برای اجرای کدهایی به کار می رود که نمی دانیم مدت زمان اجرای آنها چقدر طول می کشد و بنابراین کد آن در یک thread ای غیر از thread اصلی برنامه اجرا می شود (در پس زمینه اجرا می شوند). 
معمولا اطلاعات دریافتی از اینترنت، توسط AsyncTask دریافت می شوند (به دلیل متغیر بودن سرعت اینترنت و ...).
در روش doInBackground ، کد اصلی که زمان بر است، اجرا می شود و هنگامی که اجرای آن پایان یابد، نتیجه به روش onPostExecute ارسال می شود و بنابراین کدهای پایانی که می خواهیم بعد از اجرای کد زمان بر، اجرا شوند را در روش onPostExecute می نویسیم.

فرهاد
۱۳۹۵/۰۷/۱۱
۱۳:۵۵

خیلی ممنون

sami
۱۳۹۶/۰۲/۱۹
۱۴:۲۱

سلام و تشکر از مطالب خوبتون
من به روش گفته شده عکس رو دانلود و نمایش میدم فقط یه مشکلی هست.. اگر عکس رو در سرور عوض کنم گاهی یکی دو روز طول میکشه تا در برنامه عوض بشه!!! آیا این مسئله مربوط به network cash  (کش اینترنت مورد استفاده) هست؟ و راهکار چیه؟؟؟

علی
۱۴۰۲/۰۳/۱۹
۱۶:۳۲

سلام سلطان ببین وقتی که عکس رو از سرور تغییر بدی طرف وقتی داخل برنامه اینترنت رو روشن کنه عکسه عوض میشه

شیرازی
۱۴۰۰/۰۱/۲۵
۰۲:۰۸

سلام مهندس
تابع را در کجا تعریف میکنیم

محمود
۱۴۰۰/۰۱/۲۶
۱۶:۰۳

سلام و خدا قوت
برای بنده سوال هست که اگر کسی برای رفع اشکال از برنامه اندرویدی خودش از کدهایی که شما در سایت برای رفع مشکل ارائه میکنید استفاده کند خوب در حکم کپی از سایت محسوب می شود. در حالی که در مقررات سایت شما اجازه کپی کردن نداده اید. لطفا این موضوع را شفاف نمایید. متشکرم

admin
۱۴۰۰/۰۱/۲۷
۱۰:۱۰

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


ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)