我遇到了这个例外:
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
使用此代码时:
mAdapter = new FirebaseRecyclerAdapter<Campaign, CampaignHolder>(Campaign.class, R.layout.recyclerview_template, CampaignHolder.class, ref) {
@Override
public void populateViewHolder(final CampaignHolder viewHolder, final Campaign campaign, final int position) {
final String key = campaign.x;
FirebaseDatabase.getInstance().getReference().child("x").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.hasChild(key)) {
getRef(position).removeValue(new DatabaseReference.CompletionListener() { //Crash here
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError != null)
FirebaseCrash.report(databaseError.toException());
else{
if (mAdapter.getItemCount() == 0){
v.findViewById(R.id.empty).setVisibility(View.VISIBLE);
}
}
}
});
return;
}
//...
}
在这一行:
getRef(position).removeValue(new DatabaseReference.CompletionListener() {
(我用x
替换了一些字符串,因为我想让它们保密:
造成这个问题的原因是什么?我该如何解决?
答案 0 :(得分:0)
我把它解决了:
DatabaseReference ref = getRef(position);
在内部类之外,然后使用ref
而不是getRef()
。这对我来说是解决了,至少我认为。
答案 1 :(得分:0)
此问题的正确解决方案如下:Firebase RecylcerView Adapter Not Getting Accurate View Position
你不应该使用populateViewHolder之外的位置作为值 可能有所不同相反,让你的viewHolder最终并使用 viewHolder.getAdapterPosition()来替换它。