firebase Realtime Database에 저장된 값을 불러와서 활용해 볼 예정이다.

먼저 user객체를 생성한다.

UserAccount.java

package com.example.movieapp;

//사용자 계정 정보 모델 클래스

import java.util.ArrayList;

//firebase -> 테이블 개념x
//테이블이라 생각하고 key값 넣기
public class UserAccount {
    //    private String profile; //프로필 이미지
    private String name;     // 닉네임
    private String email;     // 이메일 아이디
    private String mbti;    //mbti
    private String idToken; //Firebase Uid (고유 토큰정보)
    private ArrayList<String> resultList;
    /**
     * firebase realtime database를 쓸 때 모델클래스를 이용해서 갖고와야할 때 빈 생성자를 만들어주어야 함
     * -> 안 그러면 database 조회시 오류
     * @param
     */

    public UserAccount(){

    }
    //값을 추가할 때 씀
    public UserAccount(String email,  String name, String mbti){
        this.email = email;
        this.name = name;
        this.mbti = mbti;
//        this.profile = profile;
    }

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

    public String getMbti(){
        return mbti;
    }

    public void setMbti(String mbti){
        this.mbti = mbti;
    }

    public String getIdToken(){
        return idToken;
    }

    public void setIdToken(String idToken){
        this.idToken = idToken;
    }

    public void setResultList(ArrayList<String> resultList){this.resultList = resultList;}

    public ArrayList<String> getResultList(){return resultList;}

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

}

오랜만에 객체지향을 활용해보았다.

배운지 1년이 지나 거의 기억이 나지 않아 많은 구글링을 통해 값 전달 방식을 다시 학습하였다.

객체에 있는 내용은 데이터베이스에 저장되는 내용과 동일하다.

set을 통해 값을 수정할 수 있으며, get을 통해 값을 가져온다. 이렇게 따로 구현하는 이유는 프로그램이 마음대로 값을 변경하는 일이 없도록 하기 위해서이다.

//로그인 user의 name, mbti읽기
    private void readUser(String userUid){
        userReference.child("user").child(userUid).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                UserAccount user = snapshot.getValue(UserAccount.class);

                //각각의 값 가져오기
                //이거 화면에 옮기면 됨
                String name = user.getName();
                String mbti = user.getMbti();

                Log.d("name", name);
                Log.d("mbti", mbti);
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }

user의 값을 읽는 함수이다.

<aside> 💡 userReference.child("user").child(userUid).addValueEventListener

</aside>

이걸 통해 firebase RealtimeDatabase에 저장된 값에 접근할 수 있다.

//내 프로필 수정하기 -> 값 수정 함수
    private void modifyUser(String userUid){
        userReference.child("user").child(userUid).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                UserAccount user = snapshot.getValue(UserAccount.class);

                //값 수정
                //나중에 text 받아서 괄호안에 값 바꿔야됨
                user.setName("abc");
                user.setMbti("ENFP");

                //값 바뀐거 확인 완료되면 지우기
                String name = user.getName();
                String mbti = user.getMbti();
                Log.d("name", name);
                Log.d("mbti", mbti);
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }

사용자에게 값을 받아 realtimeDatabase에 저장된 내용도 바뀔 수 있도록 함수를 구현하였다.