-1

I have an error when I delete all the items from my recyclerview. No problem when I delete one specific item, the error appears when I delete the last one (I mean, when I delete everything). So here is my code

viewHolder.itemView.findViewById(R.id.rmvPerson).setOnClickListener(new     View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    firebaseRecyclerAdapter.getRef(position).removeValue();
                    firebaseRecyclerAdapter.notifyItemRemoved(position);
                    dataBase.child(getRef(position).getKey().toString().trim()).child("usuario").removeValue();
                }
            });

So the error is:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: uyenterteinment.haynoche, PID: 7251
              java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
                  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
                  at java.util.ArrayList.get(ArrayList.java:308)
                  at com.firebase.ui.database.FirebaseArray.getItem(FirebaseArray.java:50)
                  at com.firebase.ui.database.FirebaseRecyclerAdapter.getRef(FirebaseRecyclerAdapter.java:155)
                  at uyenterteinment.haynoche.EventSingleActivity$3$3.onClick(EventSingleActivity.java:239)
                  at android.view.View.performClick(View.java:5698)
                  at android.view.View$PerformClick.run(View.java:22557)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:158)
                  at android.app.ActivityThread.main(ActivityThread.java:7231)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

Here as you can see, it sais

at uyenterteinment.haynoche.EventSingleActivity$3$3.onClick(EventSingleActivity.java:239)

this line is:

firebaseRecyclerAdapter.getRef(position).removeValue();
Vidhi Dave
  • 5,614
  • 2
  • 33
  • 55
  • Possible duplicate of [What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?](https://stackoverflow.com/questions/5554734/what-causes-a-java-lang-arrayindexoutofboundsexception-and-how-do-i-prevent-it) – AskNilesh Mar 14 '18 at 04:31
  • my dear friend @VishvaDave did you read the question properly check the exception **`IndexOutOfBoundsException : Invalid index 1, size is 1`** – AskNilesh Mar 14 '18 at 04:38
  • @NileshRathod Ok got it :D – Vidhi Dave Mar 14 '18 at 04:39

4 Answers4

0

Call notifyDataSetChanged() on the firebaseRecyclerAdapter as such

viewHolder.itemView.findViewById(R.id.rmvPerson).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    var index = position - 1;
                    firebaseRecyclerAdapter.getRef(index).removeValue();
                    firebaseRecyclerAdapter.notifyItemRemoved(position);
                    dataBase.child(getRef(position).getKey().toString().trim()).child("usuario").removeValue();
                    firebaseRecyclerAdapter.notifyDataSetChanged();
                }
            });

And to prevent the exception, just substract 1 from the position because indexes are zero-based thus meaning the first item has index 0.

Raimo
  • 1,494
  • 1
  • 10
  • 19
0

Update your view after removing item from recyclerview, By adding "notifyDataSetChanged()" after removing item.

AskNilesh
  • 67,701
  • 16
  • 123
  • 163
Qandil Tariq
  • 539
  • 1
  • 3
  • 15
0

I think this is use for you

viewHolder.getAdapterPosition()

where you are click item

viewHolder.itemView.findViewById(R.id.rmvPerson).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            firebaseRecyclerAdapter.getRef(viewHolder.getAdapterPosition()).removeValue();
            dataBase.child(getRef(viewHolder.getAdapterPosition()).getKey().toString().trim()).child("usuario").removeValue();
            firebaseRecyclerAdapter.notifyItemRemoved(viewHolder.getAdapterPosition();
        }
    });
Umesh AHIR
  • 738
  • 6
  • 20
0

Immediately after removing the value from recyclerview, Call notifyDataSetChanged() from the adapter to refresh the recyclerview with the edited data.So that the size of the ArrayList will also be updated.

viewHolder.itemView.findViewById(R.id.rmvPerson).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                  /*remove value*/
                notifyDataSetChanged();
            }
        });
kIN
  • 14
  • 3