2016-06-26 11 views
1

Firebaseのユーザ認証のためにAuthStateListener内にUIDや表示名などのユーザデータにアクセスする方法を知っています。私はこれらの変数にAuthStateListenerの外部でアクセスできるようにしたい。私はAuthStateListener内の変数にこのデータを割り当てようとしましたが、それを単にコンソールに出力しました。これは私のコードのサンプルです。すべての変数が正しく宣言されていると仮定し、コードとは、コンパイル時のエラーはありません:ヌル: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()メソッドで削除しました。私は形式を使用して、意図にUIDとのDisplayNameを追加しました:

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

ホームクラスは、これら2つのデータを受け取り、これはそれを扱う方法です。次のスニペットで、すべての変数が正しく初期化されているものとします。

//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ではなく正しい値が割り当てられているかどうかを確認するテストに過ぎません。 –

関連する問題