2016-06-26 6 views
1

Firebase에서 사용자 인증을 위해 AuthStateListener 내부에 UID 및 표시 이름과 같은 사용자 데이터에 액세스하는 방법을 알고 있습니다. AuthStateListener 외부에서 이러한 변수에 액세스 할 수 있어야합니다. 이 데이터를 AuthStateListener 내의 변수에 할당 한 다음 간단히 콘솔에 인쇄했습니다. 이것은 내 코드 샘플입니다. 모든 변수가 올바르게 선언 된 가정하고 코드와 더 컴파일 시간 오류가 없습니다 : 널 (null) :AuthStateListener Firebase 외의 사용자 데이터에 액세스 Android

//Inside onCreate 
mListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if(user != null){ 
       //mName has been declared previously outside of the onCreate() method 
       mName = user.getUid(); 
      } 
     } 
    }; 

    @Override 
    public void onStart(){ 
     super.onStart(); 
     mAuth.addAuthStateListener(mListener); 
     System.out.println("UID: " + mName); 
    } 

그러나, 콘솔이 UID 말한다. 사용자의 실제 UID를 어떻게 표시 할 수 있습니까?

답변

1

나는 내 자신의 문제를 해결 한 것처럼 보였다. 스플래시 화면을 통해 UID와 이름을 얻은 다음 해당 데이터를 의도를 통해 전달했습니다. 시작 화면에서

:

mListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if(user != null){ 
       Intent toHome = new Intent(splash.this, home.class); 
       toHome.putExtra("uid", user.getUid()); 
       toHome.putExtra("name", user.getDisplayName()); 
       startActivity(toHome); 
      } 
      else{ 
       Intent toLogin = new Intent(splash.this, Login.class); 
       startActivity(toLogin); 
      } 
     } 
    }; 

사용자가 존재하는 경우

는, 다음 메인 페이지로 이동하지만, 그렇지 않으면, 사용자가 (적어도 내 경우)에 로그인해야합니다. 물론이 리스너를 onStart()에 추가하고 onStop() 메서드에서 제거했습니다.

intent.putExtra("key", "value"); 

홈 클래스는 데이터의 두 조각을 받고 그것을 다루는 방법이있다 : 나는 형식을 사용하여 의도에 UID 및 표시 이름을 추가했다. 다음 코드에서 모든 변수가 올바르게 초기화되었다고 가정합니다.

//This is inside the home class 
mUID = getIntent().getExtras().getString("uid"); 
mName = getIntent().getExtras().getString("name"); 

및 presto! 현재 로그인 한 사용자의 UID 및 이름에 액세스 할 수 있습니다!

+1

문제를 해결하는 방법을 알아 냈다고 들었습니다. 어떻게했는지에 대한 코드를 표시하면 유사한 문제가 발생할 수있는 다른 사람들에게 더 유용 할 것입니다. –

0

mName을 지정한 후에도 콜백 내부에서 uid를 인쇄 할 수 있습니다.

+0

글쎄, 내 결과로 원하는 것은 아니다. 인쇄 부분은 mName에 null이 아닌 올바른 값이 할당되었는지 확인하는 테스트 일뿐입니다. –