I'm getting ArrayIndexOutOfBoundsException
pointing to my onError
method of Picasso:
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);
}
});
I was not able to reproduce this issue on my device, so I'm not sure why it is happening?
So far this only happens on devices running Android 8.0.0.
I have internet permissions.
Here is my log from crashlytics:
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)
Any help would be appreciated.
Edit 1:
To clarify, I changed the following from:
@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);
}
});
to the following:
@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);
}
});