파이어베이스에서 읽어오는 데이터 값이 저장이 되지 않습니다.
class LogInActivity : AppCompatActivity() {
var userId = ""
var pcType = ""
var nickName = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_log_in)
val db: DatabaseReference = Firebase.database.reference
// 이미 로그인이 되어있는 경우
UserApiClient.instance.accessTokenInfo { tokenInfo, error ->
if (error != null) {
Log.e("Token", "토큰 정보 보기 실패")
} else if (tokenInfo != null) {
Log.d("Token", "토큰 정보 보기 성공")
UserApiClient.instance.me { user, error ->
if (error != null) {
Log.e("TAG", "사용자 정보 요청 실패", error)
} else if (user != null) {
val id = user.id.toString()
setId(id)
db.child("users").child(id).child("type").get().addOnSuccessListener {
val dbType = it.value.toString()
Log.i("info t", dbType.toString())
setType(dbType)
}.addOnFailureListener {
Log.e("firebase", "Error getting data", it)
}
db.child("users").child(id).child("nickname").get().addOnSuccessListener {
val nick = it.value.toString()
Log.i("info nick", nick)
nickName = nick
}.addOnFailureListener {
Log.e("firebase", "Error getting data", it)
}
/*************************/
private fun setId(id : String) {
userId = id
}
private fun setType(t : String) {
pcType = t
}
데이터 저장에 필요 변수는 전역으로 설정해주었습니다.
db.child("users").child(id.toString()).child("type").get().addOnSuccessListener {
이 부분의 중괄호 내에서 dbType 변수에 데이터가 잘 저장된 걸 확인했습니다. 또한 전역변수로 선언해놓은 pcType에도 저장이 되어있습니다.
하지만 위 코드의 중괄호를 나가게 되면 pcType 변수에 다시 null 값이 들어 가 있습니다.
nickName 처럼 set 메소드를 안 쓰고 직접 저장을 해도 똑같이 중괄호를 나가면 다시 null 값으로 돌아갑니다.
이와 마찬가지로 UserApiClient.instance.me에서 저장되는 id값도 중괄호를 벗어나면 null 값으로 됩니다..
며칠 전만 해도 문제 없이 잘 저장되었던 걸로 알고 있었는데 갑자기 변수에 값이 저장이 안되니 막막합니다..
제가 코틀린을 잘못 이해하고 사용하고 있는 것인가요?
파이어베이스에서 가져온 데이터 값을 어떻게 해야 변수에 저장할 수 있는지 궁금합니다.
현재 가지고 있는 코틀린 책도 없어서 구글링으로만 코드 작성 중이라 모르는 게 많습니다 ㅠㅠ..
댓글