آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

آموزش بارگذاری مستقیم تصویر از سرور و نمایش در imageView

PandaStudio  12 سال پیش  12 سال پیش
+2 0

سلام دوستان

در روشی که استاد در آموزش 4-16 بیان کردند تصاویر ابتدا باید از سرور دانلود شده و روی گوشی ذخیره میشدن تا بعد بشه اونها را داخل imageView نشون داد که این روش برای اپ هایی که تصاویر زیادی دارن باعث میشه رم طرف زود پر شه که در این صورت تنها چاره کار اینه که تصویر را مستقیم از سرور بگیری و درون imageView نشون بدی و تنها تصاویری که کاربر میخواد ذخیره کنه را با استفاده از لایبرری استاد دانلود کنی. برای نمایش مستقیم عکس از یک URL من از کد زیر استفاده میکنم :

ImageView imgThumb = (ImageView) view.findViewById(R.id.imgThumb);
try { URL url = new URL("http://.....Image Path....."); Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream()); imgThumb.setImageBitmap(image); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

حالا سوال اصلی اینجاست که اگه خواستی از این تصویر برای لیست ویو استفاده کنیم و کاربر با یک اسکرول یکدفعه درخواست گرفتن و نمایش 100تا تصویر را داد اینجوری حجم بالایی از درخواست و دانلود برای سرور فرستاده میشه که خوب این به نظر جالب نمیاد و ممکنه منابع را درگیر کنه و  حتی برنامه فرس کلوز بشه حالا چطور میشه این کد را بهینه کرد؟

یه مثال خوب و بهینه به نظرم اپ نت برگ یا دیوار یا حتی همون کافه بازاره

ممنون از همه

0 0
اساتید کسی نظری نداره در این رابطه؟ (12 سال پیش)
0 0
به نظرم بازار و دیوار هم همین کار استاد رو انجام میدن ، میتونی از میزان فضای اشغالیشون تو App info متوجه بشی ، اما برای دانلود تصاویر به صورت تک تک و پشت سر هم کتابخونه هایی هست مثل : لینک ، (من به عنوان شاگرد نظر دادم) (12 سال پیش)
0 0
ممنون اینو دیده بودم. نه من بازارو دیوارو بررسی کردم هیچی ذخیره نمیکنه فقط اونهایی که نشان میکنی که بخای آفلاین ببینی را ذخیره می کنن (12 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
مجتبی یگانه  12 سال پیش
+3 0

من سعی میکنم یکم راهنمایی کنم تا کلا برنامه ی بهینه تر بنویسی ! 

در آموزش هایی که اسپیریت عزیز لینک داده بود (ویدئو های آموزشی گوگل) گفته بود 3 جا باید از ترد استفاده بشه

  1. ارتباط با اینترنت
  2. خواندن اطلاعات از بانک اطلاعاتی
  3. Decode کردن BitMap

وقتی این کاری که میخواید انجام بدید 2 مورد رو همزمان داره پس حتما باید از Thread ها استفاده بشه :)

 ArrayList<Thread> threads = new ArrayList<Thread>();
Thread thread = new Thread(new Runnable() {

	@Override
	public void run() {
		ImageView imgThumb = (ImageView) view.findViewById(R.id.imgThumb);
		try {
			URL url = new URL("http://.....Image Path.....");
			Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
			imgThumb.setImageBitmap(image);
		}
		catch (MalformedURLException e) {
			e.printStackTrace();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}
});
threads.add(thread);
// May be 1000 Threads Add Here !
startDownloadQueue(threads);

تابع startDownloadQueue هم باید به شکلی نوشته بشه که از اولین Thread شروع کنه و در onDownloadFinished دوباره فراخوانی بشه ، برای اینکه موقعیت ایتمی که الان باید دانلود بشه رو هم داشته باشید کافیه یک فیلد به اسم index در سطج کلاس بسازید و در رویداد onDownloadComplete اون رو ++ کنید

0 0
ممنون روش کار میکنم (12 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .