消息未显示在Firebase聊天应用程序的聊天活动中

时间:2019-07-18 13:02:40

标签: android firebase-realtime-database

我正在尝试在回收者视图中显示消息。我可以成功地将消息发送到Firebase服务器,但应用程序中没有显示任何消息,包括我的消息。我已经创建了两种模型,一种用于用户,一种用于消息。我不知道问题出在检索数据还是在我的回收站视图上。

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_group_chat);
    init();
}

private void init() {
    auth= FirebaseAuth.getInstance();
    database= FirebaseDatabase.getInstance();
    u= new User();

    rvmessage= findViewById(R.id.rvMessage);
    etMessage= findViewById(R.id.etMesage);
    imgButton= findViewById(R.id.btnSend);
    imgButton.setOnClickListener(this);
    messages= new ArrayList<>();
}

@Override
public void onClick(View v) {
    if(!TextUtils.isEmpty(etMessage.getText().toString())){
        Message message= new  Message(etMessage.getText().toString(), u.getName());
        etMessage.setText("");
        messagedb= database.getReference("messages");
        messagedb.push().setValue(message);
    }
    else{
        Toast.makeText(this, "You cannnot send blank message", Toast.LENGTH_SHORT).show();
    }

}


@Override
protected void onStart() {
    super.onStart();
    final FirebaseUser currentUser= auth.getCurrentUser();

    u.setUid(currentUser.getUid());
    u.setEmail(currentUser.getEmail());

    database.getReference("User").child(currentUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            u= new User();
            u= dataSnapshot.getValue(User.class);
            u.setUid(currentUser.getUid());
            AllMethods.name= u.getName();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

            messagedb= database.getReference("messages");
            messagedb.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                    Message message= dataSnapshot.getValue(Message.class);
                    message.setKey(dataSnapshot.getKey());
                    messages.add(message);
                    displayMessages(messages);
                }

                @Override
                public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                    Message message= dataSnapshot.getValue(Message.class);
                    message.setKey(dataSnapshot.getKey());

                    List<Message> newMessages= new ArrayList<Message>();

                    for(Message m: messages){
                        if (m.getKey().equals(message.getKey())){
                            newMessages.add(message);
                        }
                        else
                        {
                            newMessages.add(m);
                        }
                    }

                    messages= newMessages;
                    displayMessages(messages);


                }

                @Override
                public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                    Message message= dataSnapshot.getValue(Message.class);
                    message.setKey(dataSnapshot.getKey());
                    List<Message> newMessages= new ArrayList<Message>();

                    for(Message m: messages){

                        if(!m.getKey().equals(message.getKey())){
                            newMessages.add(m);
                        }
                    }

                    messages= newMessages;
                    displayMessages(messages);

                }

                @Override
                public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

        }
    });
}


private void displayMessages(List<Message> messages) {
rvmessage.setLayoutManager(new 
LinearLayoutManager(GroupChatActivity.this));
    messageAdapter= new messageAdapter(GroupChatActivity.this, messages, 
messagedb);
    rvmessage.setAdapter(messageAdapter);
}


//pojo for messages

public class Message {
String name;
String message;
String key;

public Message() {
}

public Message(String name, String message) {
    this.name = name;
    this.message = message;
    this.key = key;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public String getKey() {
    return key;
}

public void setKey(String key) {
    this.key = key;
}

@NonNull
@Override
public String toString() {
   return "Message{"+ "Message='" +message + '\''+", name='" + name+ 
'\''+", key='" +key+'\''+'}';
}
}

 //pojo for user
public class User {

String uid;
String email, name;

public String getUid() {
    return uid;
}

public void setUid(String uid) {
    this.uid = uid;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;

}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@NonNull
@Override
public String toString() {
    return "User{"+ "uid='" +uid + '\''+", name='" + name+ '\''+", email='" +email+'\''+'}';
}

public User() {


}
}
//adapter code(onBindviewHolder)
public void onBindViewHolder(@NonNull messageAdapterViewholder holder, int position) {
Message message = messages.get(position);
if(message.getName().equals(AllMethods.name)){
    holder.tvTitle.setText("You : " + message.getMessage());
    holder.tvTitle.setGravity(Gravity.START);
    holder.l1.setBackgroundColor(Color.parseColor("EF9E73"));

0 个答案:

没有答案