[Firebase] 실시간 채팅방 만들기 - Realtime Database - 1 (사용자 검색)

원준·2023년 10월 11일

Firebase

목록 보기
5/11

레이아웃 코드는 제외한다.

Realtime Database 만들기

  • Firebase 콘솔에 접속하면 쉽게 찾을 수 있다!
  • 위치는 미국이 기본값으로 되어있고, 한국은 없으니 그대로 설정하자!

  • 보안 규칙은 테스트를 위해 만들것이기에 아래와 같이 설정하자!

    • 테스트 모드는 인증되지 않은 모든 사용자도 사용가능하지만, 일정 시간 후에 접근이 자동으로 거부 되도록 설정된다!
  • 정상적으로 만들어졌다!!

이제 만들어 볼까???

0. 설정

1. 유저 클래스 생성

  • 데이터베이스에 저장할려면 우선 클래스의 형태로 변환하고 만들어야한다!
  • 클래스를 생성하지 않고 넣었다면!!! 이상하게 나왔을 것이다!!!!

    • (코드를 자세히 보면 User 클래스를 만들면서 값을 넣었는데 그냥 넣으면 읽을 수 가 없다.....)
  • 정상적으로 저장되었을 경우!!!

    • 알수 없는 코드로 묶어져 있을 것을 볼 수 있다!!! (클래스로 만들어 진것임!!)

생성하자!!

  • 저장할 사용자 id, email, name을 만들어 클래스로 만들자!!

    // 유저 정보 저장 클래스
    public class User implements Serializable {
       private String uid;
       private String name;
       private String email;
    
       public User() {
       }
    
       public User(String uid, String name, String email) {
           this.uid = uid;
           this.name = name;
           this.email = email;
       }
       
       //....
    }

2. 검색된 유저를 RecyclerView로 보여주자!

  • 선언 부분
  RecyclerView recyclerView;
  UserAdapter adapter;
  ArrayList<User> userArrayList = new ArrayList<>();
  • 유저 검색 부분
// 실시간 데이터베이스의 User/users의 경로에 접근 
FirebaseDatabase.getInstance()
        .getReference("User").child("users")
        .addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                progressBar.setVisibility(View.GONE);
                for(DataSnapshot data : snapshot.getChildren()){
                    // 모든 유저를 반복문 돌리면서, User객체로 변환
                    User user = data.getValue(User.class);

                    // 이름과 이메일에 포함되는 문자열이 없다면 다음 객체로 넘어간다.
                    if(!user.getName().contains(search) && !user.getEmail().contains(search)){
                        continue;
                    }

                    // 검색된 id 중 접속된 자신의 id와 일치하지 않는 경우에만 출력한다.
                    if(!user.getUid().equals(FirebaseAuth.getInstance().getCurrentUser().getUid())){
                        userArrayList.add(user);
                        adapter.notifyDataSetChanged();
                    }
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

3. 완성된 화면!!!

profile
공부해보자

0개의 댓글