작성
·
25
0
강의 잘 보고 있습니다
다름이 아니라 로그인 로그아웃 버튼도 만들었고
수업에 나온 것처럼 똑같이 코드를 썼는데도
막상 작동하면 uid까진 출력되는데
문제는
1) 로그아웃 버튼을 누르면 null 메세지가 출력이 안 됩니다
2) 그렇다고 로그아웃 버튼을 누르고 로그인 되어있던 계정을 누르면 toast로 써둔 "로그인 성공"이라는 메세지가 안 뜸
일단 MainActivity.kt에 쓴 코드와
activity_main.xml에 쓴 코드를 올리겠습니다
//MainActivity.kt에 쓴 코드
package com.example.mysampleapp
import com.example.mysampleapp.databinding.ActivityMainBinding
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.databinding.DataBindingUtil
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
class MainActivity : AppCompatActivity() {
private lateinit var auth: FirebaseAuth
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
// Initialize Firebase Auth
auth = Firebase.auth
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
Toast.makeText(this, auth.currentUser?.uid.toString(),Toast.LENGTH_SHORT).show()
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val joinBtnClicked = findViewById<Button>(R.id.joinBtn)
joinBtnClicked.setOnClickListener {
// 첫번째 방법
// val email = findViewById<EditText>(R.id.emailArea)
// val pwd = findViewById<EditText>(R.id.pwdArea)
//두번째 방법
val email = binding.emailArea
val pwd = binding.pwdArea
auth.createUserWithEmailAndPassword(
email.text.toString(),
pwd.text.toString()
)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
Toast.makeText(this,"ok",Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this,"no",Toast.LENGTH_SHORT).show()
}
}
binding.logoutBtn.setOnClickListener{
auth.signOut()
Toast.makeText(this,auth.currentUser?.uid.toString(),Toast.LENGTH_SHORT).show()
}
binding.loginBtn.setOnClickListener{
val email = binding.emailArea
val pwd = binding.pwdArea
auth.signInWithEmailAndPassword(
email.text.toString(),
pwd.text.toString()
)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
//성공하면
Toast.makeText(this, "로그인 성공", Toast.LENGTH_SHORT).show()
//성공하면 UID 값을 띄워보자↓
Toast.makeText(this,auth.currentUser?.uid.toString(),Toast.LENGTH_SHORT).show()
} else {
//실패하면
Toast.makeText(this, "로그인 실패", Toast.LENGTH_SHORT).show()
}
}
}
}
}
}
//activity_main.xml에 쓴 코드
<?xml version="1.0" encoding="utf-8"?>
<layout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<EditText
android:id="@+id/emailArea"
android:hint="email"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/pwdArea"
android:hint="pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/joinBtn"
android:text="회원가입"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/logoutBtn"
android:text="LOGOUT"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/loginBtn"
android:text="LOGIN"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</layout>
긴 글 읽어주심에 감사합니다....😥😥
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. kotlin21sswu님.
로그인 및 로그아웃 기능과 관련하여 문제를 겪고 계신 것 같습니다. 우선, 로그인 및 로그아웃 버튼과 관련된 메소드를 다시 확인하고 테스트할 수 있도록 몇 가지 제안을 드리겠습니다.
auth.currentUser
를 null
로 설정합니다. 로그아웃 후 auth.currentUser
가 null
로 되어야 하지만, 문자열 변환 메소드 toString()
을 사용할 때 실제 null
이 아니라 “null”이라는 문자열이 출력될 수 있습니다.auth.currentUser
의 존재 여부에 따라 나타내도록 수정해보세요:
binding.logoutBtn.setOnClickListener {
auth.signOut()
val message = if(auth.currentUser == null) "Logged out successfully" else "Failed to log out"
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}
로그인 과정에서 메소드 체이닝 중에 문제가 발생한 것일 수도 있습니다. auth.signInWithEmailAndPassword()
의 결과를 로그로 직접 확인하여 task.isSuccessful
내의 로직이 제대로 실행되고 있는지 체크해보세요:
binding.loginBtn.setOnClickListener {
val email = binding.emailArea
val pwd = binding.pwdArea
auth.signInWithEmailAndPassword(email.text.toString(), pwd.text.toString())
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
Toast.makeText(this, "로그인 성공", Toast.LENGTH_SHORT).show()
Toast.makeText(this, auth.currentUser?.uid.toString(), Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "로그인 실패", Toast.LENGTH_SHORT).show()
}
}
}
onCreate()
한 구문 내에 잘 배치되었는지:onCreate()
메소드 안에서 setOnClickListener
는 setContentView(R.layout.activity_main)
호출 후에 배치됩니다. 이 부분이 잘 구현되어 있는지 확인하세요.최신 Firebase SDK가 설치되어 있는지, AndroidManifest.xml 및 google-services.json 파일이 올바르게 설정되어 있는지도 확인해 보세요. 문제가 지속된다면 로그를 통해 추가적인 오류 메시지를 확인하는 것이 도움될 수 있습니다.
이와 관련된 유사한 문제에 대한 추가적인 설명은 아래의 링크를 통해 참고하실 수 있습니다:
- 파이어 베이스 회원가입 과정이 안됩니다.
- 로그인 no 로 나오고 파이어베이스 사용자에 데이터가 안 들어옵니다
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.