레이아웃 코드는 제외한다.
private FirebaseAuth mAuth;
DatabaseReference myRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
//....
mAuth = FirebaseAuth.getInstance();
// 인증된 사용자가 존재하지 않으면, 로그인 화면으로 돌아간다.
if(mAuth.getCurrentUser() == null){
Intent intent = new Intent(ChatActivity.this, LoginActivity.class);
startActivity(intent);
finish();
return;
}
// 채팅방 경로 설정
FirebaseDatabase database = FirebaseDatabase.getInstance();
myRef = database.getReference("ChatRoom").child("chatRooms");
}
protected void chatRoomAdd(){
chatRoomArrayList.clear();
// ChatRoom/chatRooms의 경로안에 users의 경로중 접속한 자신의 uid와 일치하는 부분을 전부 찾는다.
myRef.orderByChild("users/" + mAuth.getCurrentUser().getUid()).equalTo(true)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot data : snapshot.getChildren()){
// 찾은 정보들을 전부 ChatRoom 클래스에 담자.
// 찾은 정보들의 키값들이 존재하는데, 고유 키값이니 같이 저장하자.
ChatRoom chatRoom = data.getValue(ChatRoom.class);
chatKeyArrayList.add(data.getKey());
chatRoomArrayList.add(chatRoom);
adapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
ChatRoom chatRoom = chatRoomArrayList.get(position);
int limit = chatRoom.messages.values().size();// 해당 채팅방의 메시지의 크기가 1이상이면
if(limit > 0){
// 메시지의 마지막의 값을 찾습니다.
List<Message> messageList = chatRoom.messages.values().stream()
.sorted(Comparator.comparing(Message::getDate)).skip(limit-1).collect(Collectors.toList());
Message message = messageList.get(0);
if(message.getConfirmed()){ // true일 경우 이미지로 출력하기로 하자.
holder.imageView.setVisibility(View.VISIBLE);
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReference(message.getContent());
Glide.with(context).load(storageRef).placeholder(R.drawable.baseline_broken_image_24)
.override(300, 300)
.diskCacheStrategy(DiskCacheStrategy.DATA)
.into(holder.imageView);
holder.txtMessage.setText("");
}else{ // flase일 경우 텍스트로 출력하기로 하자
holder.imageView.setVisibility(View.GONE);
holder.txtMessage.setText(message.getContent());
}
}else {
holder.txtMessage.setText("");
}
List<Message> messageList = chatRoom.messages.values().stream()
.sorted(Comparator.comparing(Message::getDate)).skip(limit-1).collect(Collectors.toList());
chatRoom.messages.values().stream().sorted(Comparator.comparing(Message::getDate))
.skip(limit-1)
.collect(Collectors.toList());