인프런 커뮤니티 질문&답변

ssh7423님의 프로필 이미지

작성한 질문수

[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)

유저 정보 데이터베이스에 저장

3강 firebase 쓰기가 동작하질않아요

24.06.18 16:40 작성

·

87

0

3강 첫번째 유저 데이터베이스 쓰기

강의보고 firebase 회원가입해보고있는데

email, pw 는 등록이 되나

realtime database에는 데이터가 들어가지 않습니다

 

package com.example.test_1.auth

import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import com.example.test_1.MainActivity
import com.example.test_1.R
import com.example.test_1.utils.FirebaseRef
import com.google.android.material.textfield.TextInputEditText
import com.google.firebase.FirebaseApp
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.database.ktx.database
import com.google.firebase.ktx.Firebase

class JoinActivity: AppCompatActivity()  {
    private val TAG = "JoinActivity"
    private lateinit var auth : FirebaseAuth //추후 초기화해서 사용할 변수이다

    private var nickname = ""
    private var gender = ""
    private var city = ""
    private var age = ""
    private var uid = ""


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_join)
        //FirebaseApp.initializeApp(this);
        auth = Firebase.auth

        var joinButton = findViewById<Button>(R.id.joinBtn)
        joinButton.setOnClickListener {
            var email = findViewById<TextInputEditText>(R.id.join_email)
            var pwd = findViewById<TextInputEditText>(R.id.join_pwdArea)
            gender = findViewById<TextInputEditText>(R.id.join_gender).text.toString()
            city = findViewById<TextInputEditText>(R.id.join_area).text.toString()
            age = findViewById<TextInputEditText>(R.id.join_age).text.toString()
            nickname = findViewById<TextInputEditText>(R.id.join_nickname).text.toString()

//            Log.d(TAG, email.text.toString())
//            Log.d(TAG, pwd.text.toString())


            auth.createUserWithEmailAndPassword(email.text.toString(),pwd.text.toString())
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "createUserWithEmail:success")
                        var user = auth.currentUser
                        uid = user?.uid.toString() // user가 null 이 아니면 toString

                        val database = Firebase.database
                        val myRef = database.getReference("message")
                        myRef.setValue("Hello, World!")
                        Log.d(TAG, "push database :success")
                        myRef.setValue("11111111111")
                        myRef.setValue("2222222222")
                        //firebase 접속관련 util로 패키징
                        //FirebaseRef.userinfo.setValue("userinfo","hello")

//                        val udm = UserDataModel(uid,
//                        nickname,
//                        age,
//                        gender,
//                        city)
//                        FirebaseRef.userInfoRef.child(uid).setValue(udm)
                        //성공시 메인으로 이동
                   //     var intent = Intent(this, MainActivity::class.java)
                    //    startActivity(intent)

                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "createUserWithEmail:failure", task.exception)
                    }
                }
        }
    }
}

 

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 06. 18. 16:46

안녕하세요, 인프런 AI 인턴입니다. ssh7423님의 질문에 대해 비슷한 상황을 겪은 다른 수강생의 질의응답을 찾아보았습니다.

질문하신 내용은 Firebase Realtime Database에 데이터가 기록되지 않는 문제와 관련이 있습니다. 코드를 살펴보니, 실제로 유저 정보를 데이터베이스에 기록하는 부분(FirebaseRef.userInfoRef.child(uid).setValue(udm))이 주석 처리되어 있네요. 이 부분을 활성화 시켜주는 것이 필요해보입니다. 또한, myRef.setValue("Hello, World!")를 사용하여 동일한 참조에 다수의 setValue를 사용하면 마지막에 설정된 값으로 덮어씌워지기 때문에 유의해야 합니다.

비슷한 상황을 겪은 다른 수강생의 문제 해결 과정을 참조하는 것도 도움이 될 수 있습니다. 주요 포인트는 다음과 같습니다:
- 데이터베이스 경로 설정이 올바른지 확인합니다.
- setValue 메소드를 사용할 때 올바른 객체 또는 값을 전달하고 있는지 확인합니다.
- addOnCompleteListener 내부에서 데이터베이스에 값을 성공적으로 기록했는지 확인하는 로그 또는 디버깅 방법을 사용합니다.

유사한 문제를 해결한 질문 링크에서 더 상세한 해결책을 찾으실 수도 있습니다. 해당 링크는 회원가입 과정에서 Firebase Realtime Database에 데이터를 기록하는 데 문제가 있었던 경우에 대한 해결 과정을 담고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ssh7423님의 프로필 이미지
ssh7423
질문자

2024. 06. 18. 17:05

addOnCompleteListener 에 logcat을 추가했는데 동작하지 않습니다...

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

2024. 06. 18. 19:07

전체 코드를 깃허브나 구글 드라이브를 통해 공유해주시겠어요?

ssh7423님의 프로필 이미지

작성한 질문수

질문하기