我尝试根据哪个用户发送消息来更改布局。但是我发现我得到了
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
发送第一条消息时出现错误。然后这会崩溃应用程序。这似乎发生在第一条消息发送时。我已经厌倦了检查messageList的大小,它等于1.所以我不确定是什么问题。
public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> {
private List<Message> messagesList;
private DatabaseReference databaseReference;
private DatabaseReference mDatabaseUser;
private DatabaseReference userDatabaseRef;
private FirebaseAuth firebaseAuth;
private Context context;
private String imageUrl;
private String getCurrent;
private FirebaseAuth mAuth;
private FirebaseUser mCurrentUser;
public static int INCOMING = 1;
public static int OUTGOING = 0;
public MessageAdapter(List<Message> messagesList) {
this.messagesList = messagesList;
}
@Override
public int getItemViewType(int position) {
mAuth = FirebaseAuth.getInstance();
mCurrentUser = mAuth.getCurrentUser();
mDatabaseUser = FirebaseDatabase.getInstance().getReference().child("Users").child(mCurrentUser.getUid());
String last = mDatabaseUser.toString().substring(mDatabaseUser.toString().lastIndexOf('/') + 1);
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child("name");
Message m = messagesList.get(position);
if( m.getFrom().equals(last)){
return MessageAdapter.INCOMING;
}
if( m.getFrom()!=(last)){
return MessageAdapter.OUTGOING;
}
return 0;
}
@Override
public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Message c = messagesList.get(viewType);
String sender = c.getFrom();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(sender);
View v = null;
if( viewType == MessageAdapter.OUTGOING ) {
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.messages_layout, parent, false);
}
if ( viewType == MessageAdapter.INCOMING) {
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.messages_layout_sent, parent, false);
}
return new MessageViewHolder(v);
}
@Override
public void onBindViewHolder(final MessageViewHolder viewHolder, final int index) {
getItemViewType(index);
final Message c = messagesList.get(index);
final String sender = c.getFrom();
getCurrent = sender.toString();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(sender);
viewHolder.messageText.setText(c.getMessage());
}
@Override
public int getItemCount() {
return messagesList.size();
}
答案 0 :(得分:0)
尝试:
Message c = messagesList.get(viewType - 1);
列表中只有一个项目,索引为 0 。 viewType
值为1
会导致错误。