2017-11-17 12 views
0

私のアプリケーションでは、初めてログインした後にユーザーをログインさせようとしています。これは動作していません。Android - ログインしているユーザーが動作していない(Firebase)

私のアプリケーションでは、複数のユーザータイプがあります。「学校」と「学生」です。私のアクティビティにはAuthStateListenerメソッドがありますが、私のアクティビティで何も起こりません。アプリケーションは、AuthStateListenerメソッドでコードを実行することなく、開始アクティビティに固執します。

mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user != null) { 
       // User is signed in 
       rootRef.addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         if (dataSnapshot.child("usertype").getValue(String.class).equals("Students") && dataSnapshot.child("verified").getValue(boolean.class).equals(true)) { 
          Intent intent = new Intent(WaitingActivity.this, StudentsActivity.class); 
          startActivity(intent); 
          finish(); 
         } 


         if (dataSnapshot.child("usertype").getValue(String.class).equals("School") && dataSnapshot.child("verified").getValue(boolean.class).equals(true)) { 
          Intent intent = new Intent(WaitingActivity.this, SchoolsActivity.class); 
          startActivity(intent); 
          finish(); 
         } 

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 

      } else { 
       // User is signed out 
       Intent intent = new Intent(WaitingActivity.this, LoginActivity.class); 
       startActivity(intent); 
      } 
      // ... 
     } 
    }; 

私は何か間違っていますか?または私は何かを逃したか?

+1

コールバックの最初の行にブレークポイントを設定すると( 'FirebaseUser user = firebaseAuth.getCurrentUser();')、トリガーされますか?また、あなたがエラーを無視しないようにしてください。 'public void onCancelled(DatabaseError databaseError){throw databaseError.toException(); } ' –

答えて

3

アクティビティが開始または再開するたびにログイン状態を確認するには、2つの方法があります。あなたが活動のonCreate()またはonResume()方法では、このようなコードを使用することができます

:また

FirebaseUser user = firebaseAuth.getCurrentUser(); 
if (user != null) { 
    // User is signed in, do whatever you need to do 
} else { 
    // User is not signed in, do whatever you need to do 
} 

、あなたが示すようにAuthStateListenerを使用していますが、リスナーを追加することを確認することができます:

FirebaseAuth.getInstance().addAuthStateListener(mAuthListener); 

removeAuthStateListener()メソッドを使用して、適切な時刻にAuthStateListenerを削除してください。

+1

リスナーは[リスナーが追加された直後に]実行されます(https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseAuth.AuthStateListener)。 –

+0

@Bob Snyder、説明をありがとう!私はその情報を含めるために私の答えを修正しました。 –

+0

これは動作します、ありがとう – JDoe

関連する問題