مشکل دانلود در اندروید 4.2.2
همونطور که دوست خوبمون reza_azizi گفته بودن مشکل دانلود در اندروید 4.0.0 با اضافه کردن setoutpt = true حل میشه . ولی این مشکل توی اندروید 4.2.2 به بالا هنوز هست.چند جا خوندم که گوگل کلا این روش رو به دلایل امنیتی بسته و باید از http client استفاده بشه و از این جور چیزا.من راه حل مناسبی برای دانلود پیدا نکردم ، دانلود نیازی به وب سرویس نداره و عکس رو با لینک مستقیم دانلود میکنه.کسی راه حلی داره؟
این لینک سوال دوستمون بود که روش درست کردنش رو توی اندروید 4.0 گفتند ولی من روی یک تبلت ، گوشی نوت 2 آپدیت 4.3 و حتی جنی موشن که تست کردم کار نمیکنه.ولی روی اندروید 2.3 و 4.0 کاملا درست کار میکنه و هیچ مشکلی هیچ جا نداره.مشکل از استفاده از Thread باید باشه چون ThumbNail هایی که اتوماتیک دانلود میشه درست کار میکنه ولی من تمام Thread هارو حذف کردم ولی بازم جواب نگرفتم دکمه دانلودم کار نمیکنه.
لینک :
http://answers.uncocoder.com/question/377/مشکل-کار-نکردن-HttpUrlConnection-در-اندروید-نسخه-4
خیلی سرچ کردم و جواب هایی که داده شد اینه که یا از Async استفاده بشه یا از service ها ولی چجوریشو خودمم موندم هنوز
بعد از 3 روز جواب رو پیدا کردم.همه چیز زیر سر ProgressBar بود.شما توی اندروید 4.2.2 به بالا نمیتونید توی Thread هاتون از یکسری چیزها استفاده کنید که یکیشون تغییر دادن UI هست.برای حل این مشکل باید از روش Async استفاده کنید که روش ساده ای هست ولی اگر بخواید با سرچ یاد بگیرید ممکنه 2 روز از وقت شما رو بگیره چون خیلی بد توضیح دادن.بعد از این که این روش رو یاد گرفتید به یک مشکل برمیخورید که تقریبا کل موهاتون سفید میشه سر اون.زمان آپدیت ProgressBar همش NullPointer میگیرید و برنامه Crash میکنه.یک جا یکنفر گفته بود شاید اگر به ProgressBar مقدار اولیه بدیم درست بشه.ولی با کد زدن توی جاوا با علم و تجربه من البته این روش حل نمیشه.بیش از 10 روش برای مقدار اولیه و حتی تغییر رنگ و کانتکست و ... رو امتحان کردم که میگم.روش این بود که توی XML باید مقدار اولیه رو 0 میدادیم.خلاصه بعد از خوندن 300 صفحه از کتاب آموزش Async و خوندن حد اقل 100 پست و دیدن کلی اررور موفق به کشف دانلود کردن عکس در اندروید 4.2.2 شدم.
چون من هنوز روی ورژن های بالاتر تست نکردم نمی تونم جواب قطعی بدم، اما از صحبت های شما برمیاد که مشکل از تغییر مقدار ProgressBar در داخل Thread باشه.
اگر خاطرتون باشه در آموزش Thread ها گفتم که هر عنصر UI اجازه نداره از خارج از Thread مقدار دهی و تنظیم بشه. اما بهتون نشون دادم که ProgressBar خارج از این قائده کار می کرد. شاید در نسخه بالاتر این موضوع رو اهمیت داده باشند و اون رو هم در این خصوص محدود کرده باشند.
پس همانطور که از setText داخل Handler برای تغییرات یک TextView استفاده کردیم، همانطور هم داخل Handler از setProgress استفاده می کنیم. فرق خاصی ندارد.
علت استفاده از AsyncTask هم این هست که اتوماتیک متدهای مشخصی را در UI Thread اجرا می کند و به خاطر همین هم هست که مشکلی ندارد. اما با یک Handler استفاده از Thread بسیار بسیار بهتر از AsyncTask هست.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .