رفتن به مطلب
  • 0

مشکل در لود تصاویر در ریسایکلر ویو


coco

سوال

سلام دوستان

 

موقع لود تصویر تو ریسایکلر ویو خواستم از ریسورس ها عکس ها رو بگیرم و توی ریسایکلرویو نشون بدم

اما وقتی اومدم به صورت ساده این کار رو کردم و Bitmap گرفتم، با توجه به این که حجم و کیفیت عکسام بالا بود، ریسایکلر ویو لگ زد :(

بعد اومدم از کتابخونه Glide استفاده که کنم

که تا حدی کار رو درست انجام داد

اما یه مشکل پیش اومد :gerye:

وقتی تا ته همینجوری اسکرول میکنم آخرا کرش میکنه

اینم لاگ کتم :

java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                                  at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                                  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                                  at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                                  at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                                  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
                                                                                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                                  at java.lang.Thread.run(Thread.java:818)
                                                                               Caused by: java.lang.ArrayIndexOutOfBoundsException: length=90; index=-1
                                                                                  at java.util.ArrayList.get(ArrayList.java:310)
                                                                                  at ir.shayan.colorfulwallpapers.RecyclerViewAdapter$1.doInBackground(RecyclerViewAdapter.java:73)
                                                                                  at ir.shayan.colorfulwallpapers.RecyclerViewAdapter$1.doInBackground(RecyclerViewAdapter.java:59)
                                                                                  at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                                  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                                  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                                                                                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                                  at java.lang.Thread.run(Thread.java:818) 

اینم کدا :

final Bitmap[] b = new Bitmap[1];

        new AsyncTask<Void,Void,Bitmap>(){
            @Override
            protected void onPostExecute(Bitmap bitmap) {
                super.onPostExecute(bitmap);
                b[0] = bitmap;
            }

            @Override
            protected Bitmap doInBackground(Void... params) {
                Bitmap bbb = null;


                try {
                    bbb = Glide.with(context)
                            .load(Integer.parseInt(String.valueOf(context.getResources().getIdentifier("a"+itemList.get(holder.getAdapterPosition()).id,"drawable",context.getPackageName()))))
                            .asBitmap()
                            .into(100,100)
                            .get();
                    return bbb;
                } catch (InterruptedException | ExecutionException e) {
                    e.printStackTrace();
                    return null;
                }




            }
        }.execute();

پ.ن : از دیتابیس اسم عکسا رو میگیرم :DD:

 

پیشاپیش ممنون از راهنماییاتون :give_rose::pardon::answercenter:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

4 پاسخ به این سوال تاکنون داده شده است

ارسال های توصیه شده

دلیل خاصی داره از بیتمپ استفاده میکنی؟ :fekr:

با کد زیر میتونی عکسهای توی ریسورس رو بیاری توی ایمیج ویو 

Glide.with(holder.mImageView.getContext())
                    .load(icon)
                    .fitCenter()
                    .into(holder.mImageView);
 icon = context.getResources().getIdentifier(context.getPackageName()+":mipmap/" +  mValues
                   .get(holder.getAdapterPosition()).getpic(), null, null);

این رو توی متد onBindViewHolder  انجام بده 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

وقتی از کتابخونه glid استفاده میکنی توی ریسایکلر ویو دیگه نیازی نیست از asynctask استفاده کنی و هر بار با تغییر پوزیشن آداپتر  بخوای یه تسک جدید ایجاد کنی. توی آداپتر عکسها رو با glid لود کنی کافیه

و اما ارور به خاطر ایندکسه عزیز

 Caused by: java.lang.ArrayIndexOutOfBoundsException: length=90; index=-1

ببین طول آرایه ای که داری ایندکس میگیری با ایندکسی که بش میدی همخونی داره یا نه؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

وقتی از کتابخونه glid استفاده میکنی توی ریسایکلر ویو دیگه نیازی نیست از asynctask استفاده کنی و هر بار با تغییر پوزیشن آداپتر  بخوای یه تسک جدید ایجاد کنی. توی آداپتر عکسها رو با glid لود کنی کافیه

و اما ارور به خاطر ایندکسه عزیز

 Caused by: java.lang.ArrayIndexOutOfBoundsException: length=90; index=-1

ببین طول آرایه ای که داری ایندکس میگیری با ایندکسی که بش میدی همخونی داره یا نه؟

آخه ببینین تو گلاید وقتی بخوای Bitmap بگیری باید تو بکگراند تسک اجرا بشه

برای همون از AsyncTask استفاده میکنم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

دلیل خاصی داره از بیتمپ استفاده میکنی؟ :fekr:

با کد زیر میتونی عکسهای توی ریسورس رو بیاری توی ایمیج ویو 

Glide.with(holder.mImageView.getContext())
                    .load(icon)
                    .fitCenter()
                    .into(holder.mImageView);
 icon = context.getResources().getIdentifier(context.getPackageName()+":mipmap/" +  mValues
                   .get(holder.getAdapterPosition()).getpic(), null, null);

این رو توی متد onBindViewHolder  انجام بده 

بله دلیل خاصی داشت :pardon:

ولی الان یادم افتاد چی کار کنم که درست شه :DD:

ممنون

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...