[안드로이드 개발] firebase RealtimeDatabase 사용법

이경민·2022년 7월 31일
0

안드로이드 📱

목록 보기
2/2

Realtime Database를 사용하기 위한 코드 설명

안드로이드 (자바)를 사용해서 firebase의 realtime database를 사용하기 위한 코드 설명.

Realtime Database의 내용 불러오기

구글 로그인의 경우 아래와 같이 user.getDisplayName()을 사용해 사용자 이름을 불러오지만 이메일과 passward를 사용한 로그인의 경우 realtime database에 직접 입력 받은 사용자 이름을 저장하고 불러온다.

mAuth=FirebaseAuth.getInstance();
final FirebaseUser user=mAuth.getCurrentUser();

TextView nickname=(TextView)rootView.findViewById(R.id.loginNickname);
nickname.setText(user.getDisplayName());
            

Fragment 코드

  1. DatabaseReference를 사용해서 FirebaseDatabase.getInstance().getReference()한다.
  2. 경로를 지정: newRef=dataRef.child("CG24").child("UserAccount").child(text);
  3. 해당 경로에 addValueEventListener
  4. getValue()를 사용해 내용을 불러온다.
DatabaseReference dataRef;
dataRef = FirebaseDatabase.getInstance().getReference();

// 마이페이지에 이름 띄우기
// value가 궁금한 직전 경로까지 입력
newRef=dataRef.child("CG24").child("UserAccount").child(text);

// addValueEventListener를 사용해서 특정 내용 getValue
newRef.addValueEventListener(new ValueEventListener() {
	@Override
    public void onDataChange(DataSnapshot dataSnapshot) {
    	String nickname1=dataSnapshot.child("nickname").getValue().toString();
    	nickname.setText(nickname1);
	}
    @Override
    public void onCancelled(DatabaseError error) {
    	Log.w("find nickname", "Failed to read value.", error.toException());
    }
});

Realtime Database 경로


Realtime Database에 내용 추가하기

setValue 함수를 사용해서 원하는 내용을 저장한다.

Fragment

  1. DatabaseReference의 원하는 경로에 addValueEventListener
  2. setValue를 하여 원하는 데이터 저장
DatabaseReference newRef=dataRef.child("CG24").child("UserAccount").child(text);
newRef.addValueEventListener(new ValueEventListener() {
	@Override
    public void onDataChange(DataSnapshot dataSnapshot) {
    	// 로그인한 사용자 정보를 realtime database에 추가
        user = FirebaseAuth.getInstance().getCurrentUser();
        UserAccount account=new UserAccount();
        account.setIdToken(user.getUid());
        account.setEmailId(user.getEmail());
        account.setNickname(user.getDisplayName());
        dataRef.child("CG24").child("UserAccount").child(user.getUid()).setValue(account);
	}
    @Override
    public void onCancelled(DatabaseError error) {
    	Log.w("find nickname", "Failed to read value.", error.toException());
    }
});

User Account

public class UserAccount {
    private String idToken;    // Firebase Uid (고유 토큰 정보)
    private String emailId;    // 이메일 아이디
    private String password;   // 비밀번호
    private String nickname;
    private String getWhose;


    public UserAccount() {}

    public String getGetWhose() {
        return getWhose;
    }

    public void setGetWhose(String getWhose) {
        this.getWhose = getWhose;
    }


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

    public String getEmailId() { return emailId; }
    public void setEmailId(String emailId) { this.emailId = emailId; }

    public String getPassword() { return password; }
    public void setPassword(String password) { this.password = password;  }

    public String getNickname() { return nickname; }
    public void setNickname(String nickname) { this.nickname = nickname; }

}

Realtime Database 내용 수정하기

아래 코드는 realtime database에 있는 사용자의 이름을 수정하는 코드입니다. AlertDialog 창을 사용하여 수정하고 싶은 이름을 입력하고 OK 버튼을 누르면 이름을 수정하는 코드.

Fragment

updateChildren을 사용해서 내용 수정

// 이름 변경하기
Button rename_btn=(Button)rootView.findViewById(R.id.mypage_rename_btn);

// 이름 변경 버튼에 listener 추가
rename_btn.setOnClickListener(new View.OnClickListener() {
	@Override
    public void onClick(View view) {
      Toast.makeText(getContext(), "rename finish", Toast.LENGTH_SHORT).show();

      final EditText etName = new EditText(getContext());
      
      // AlertDialog 창 생성
      AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
      builder.setTitle("변경할 이름을 입력해주세요").setMessage("이름 입력 후 OK 버튼을 눌러주세요").setView(etName);

      builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
          @Override
          public void onClick(DialogInterface dialog, int id) {
              Toast.makeText(getContext(), "OK", Toast.LENGTH_SHORT).show();
              String new_name=etName.getText().toString();
              nickname.setText(new_name);
              Map<String, Object> childUpdates = new HashMap<>(); 
             
             // 경로 지정
             childUpdates.put("CG24/UserAccount/"+text+"/nickname", new_name);
             // 수정하는 코드
             dataRef.updateChildren(childUpdates);
          }
      });
      builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
          @Override
          public void onClick(DialogInterface dialog, int id) {
              Toast.makeText(getContext(), "Cancel", Toast.LENGTH_SHORT).show();
          }
      });
      AlertDialog alertDialog = builder.create();
      alertDialog.show();
	}
});

0개의 댓글