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에 저장된 내용도 바뀔 수 있도록 함수를 구현하였다.