Picasso onError ArrayIndexOutOfBoundsException - PullRequest
       8

Picasso onError ArrayIndexOutOfBoundsException

0 голосов
/ 19 октября 2018

Я получаю ArrayIndexOutOfBoundsException, указывая на мой onError метод Пикассо:

Picasso.get().load(category.get(holder.getAdapterPosition()).getImage()).noFade().tag("tag").resize(100, 100).centerCrop().networkPolicy(NetworkPolicy.OFFLINE).placeholder(R.drawable.image_placeholder).into(holder.img, new Callback() {

        @Override
        public void onSuccess() {}

        @Override
        public void onError(Exception e) {
            //Error points to this line
            Picasso.get().load(category.get(holder.getAdapterPosition()).getImage()).noFade().resize(100, 100).centerCrop().memoryPolicy(MemoryPolicy.NO_CACHE).placeholder(R.drawable.image_placeholder).into(holder.img);
        }

    });

Мне не удалось воспроизвести эту проблему на моем устройстве, поэтому я не уверен, почему это такпроисходит?

Пока что это происходит только на устройствах под управлением Android 8.0.0.

У меня есть разрешения на доступ в Интернет.

Вот мой журнал аварийных сбоев:

Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=73; index=-1
   at java.util.ArrayList.get(ArrayList.java:439)
   at com.app.name.Recycler.RecyclerVideoAdapter$2.onError(RecyclerVideoAdapter.java:413)
   at com.squareup.picasso.ImageViewAction.error(ImageViewAction.java:72)
   at com.squareup.picasso.Picasso.deliverAction(Picasso.java:581)
   at com.squareup.picasso.Picasso.complete(Picasso.java:535)
   at com.squareup.picasso.Picasso$1.handleMessage(Picasso.java:122)
   at android.os.Handler.dispatchMessage(Handler.java:105)
   at android.os.Looper.loop(Looper.java:164)
   at android.app.ActivityThread.main(ActivityThread.java:6944)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Любая помощь будет признательна.

Изменить 1:

Чтобы уточнить, я изменил следующее с:

@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {

Picasso.get().load(category.get(holder.getAdapterPosition()).getImage()).noFade().tag("tag").resize(100, 100).centerCrop().networkPolicy(NetworkPolicy.OFFLINE).placeholder(R.drawable.image_placeholder).into(holder.img, new Callback() {

    @Override
    public void onSuccess() {}

    @Override
    public void onError(Exception e) {
        //Error points to this line
        Picasso.get().load(category.get(holder.getAdapterPosition()).getImage()).noFade().resize(100, 100).centerCrop().memoryPolicy(MemoryPolicy.NO_CACHE).placeholder(R.drawable.image_placeholder).into(holder.img);
    }

});

на следующее:

@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
final int adapterPosition = holder.getAdapterPosition();
Picasso.get().load(category.get(adapterPosition).getImage()).noFade().tag("tag").resize(100, 100).centerCrop().networkPolicy(NetworkPolicy.OFFLINE).placeholder(R.drawable.image_placeholder).into(holder.img, new Callback() {

    @Override
    public void onSuccess() {}

    @Override
    public void onError(Exception e) {
        //Error points to this line
        Picasso.get().load(category.get(adapterPosition).getImage()).noFade().resize(100, 100).centerCrop().memoryPolicy(MemoryPolicy.NO_CACHE).placeholder(R.drawable.image_placeholder).into(holder.img);
    }

});
...