有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android:更改聊天室布局消息

我正在尝试根据哪个用户发送消息来更改布局。然而我发现我明白了

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();
    }

共 (1) 个答案

  1. # 1 楼答案

    试试看:

    Message c = messagesList.get(viewType - 1);
    

    列表中只有一项,索引为0viewType值为1,这会导致错误