java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 in recyclerview
Posted
技术标签:
【中文标题】java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 in recyclerview【英文标题】: 【发布时间】:2019-12-10 19:04:55 【问题描述】:我需要从 Firebase 中检索名称列表,然后可以使用 recyclerview 显示名称列表。但是,它在我的 logcat 中显示 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 显示错误发生在 recyclerview 类中。提前感谢帮助我的人:)
下面是有错误的行:
holder.tname.setText(namelist1.get(position));
我不知道我的代码有什么问题。 这是我的recyclerview类
public class MyRecyclerviewPAppointment extends RecyclerView.Adapter<MyRecyclerviewPAppointment.MyViewHolder>
private Context context;
ArrayList<AppointmentObject> alist;
ArrayList<String> namelist1;
public MyRecyclerviewPAppointment(Context c, ArrayList<AppointmentObject> t,ArrayList<String> namelist)
context = c;
alist = t;
namelist1=namelist;
@Override
public void onBindViewHolder(@NonNull final MyRecyclerviewPAppointment.MyViewHolder holder,final int position)
holder.tdate.setText(alist.get(position).getDate());
holder.ttime.setText(alist.get(position).getTiming());
////////////error happened here////////////////////////
holder.tname.setText(namelist1.get(position));
@Override
public int getItemCount()
return alist.size();
这是我检索数据的方式
databaseReference= FirebaseDatabase.getInstance().getReference().child("appointment");
databaseReference.orderByChild("userid").equalTo(userid1).addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot)
for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren())
AppointmentObject thera= dataSnapshot1.getValue(AppointmentObject.class);
a.add(thera);
final String theraid = dataSnapshot1.child("theraid").getValue(String.class);
DatabaseReference refThera = FirebaseDatabase.getInstance().getReference().child("alluser").child("thera");
refThera.child(theraid).addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot3)
for (DataSnapshot ds: dataSnapshot3.getChildren())
String text = ds.child("name").getValue(String.class);
namelist.add(text);
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
Toast.makeText(getApplicationContext(), "Oh no!", Toast.LENGTH_SHORT).show();
throw databaseError.toException();
);
adapter=new MyRecyclerviewPAppointment(MainActivityPAppointment.this, a,namelist);
rv.setAdapter(adapter);
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
Toast.makeText(getApplicationContext(), "Oh no!", Toast.LENGTH_SHORT).show();
);
这是我的火力基地结构
【问题讨论】:
请仅使用android-studio
标签来回答有关 Android Studio IDE 本身的问题。对于一般的 Android 编程问题,请使用android
标签。
【参考方案1】:
您在namelist
中的项目似乎比alist
中的项目少。
public int getItemCount()
return alist.size();
由于您告诉回收站视图在视图中有alist.size()
项目,这就是它尝试绘制的项目数量。但是在某个时候,namelist
中没有对应的项目,所以它会抛出一个错误。
解决方案可能是确保alist
和namelist
中的项目数量相同,或者只呈现namelist
中的项目数量。
public int getItemCount()
return namelist.size();
【讨论】:
我已经编辑了我的问题,实际上我认为 ArrayList 有相同数量的元素?在第一个循环中,它获取与当前登录的用户对应的项目。在第二个循环中,它根据从第一个循环中检索到的一个特定数据获取项目 "我认为 ArrayList 的元素数量相同" 错误消息清楚地表明这不是真的。由于您没有展示如何填充alist
,因此无法说明为什么它们的长度不同。如果您很难解决问题,我建议您将其隔离。这通常涉及在新应用程序中从头开始,然后添加最少的代码,直到遇到相同的问题。见how to create a minimal, complete, verifiable example。以上是关于java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 in recyclerview的主要内容,如果未能解决你的问题,请参考以下文章