1

ユーザーがアンドロイドアプリでfirebaseのアカウントを作成すると、ユーザー名などの別の情報を追加できる画面に移動する必要があります。アプリはAuthStateListenerを通じて活動を切り替えるために知っているので、アカウントが作られたか、誰かがここで実行されるコードに署名されたときに(何の意図は、理由を知るために、今ここに変更していない読み続けている):Firebaseデータベースに特定のユーザのデータがあるかどうかを確認するにはどうすればよいですか? (Android/Java)

 mAuthListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user != null) { 
        // User is signed in 
        Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
        userID = user.getUid(); 
        toastMessage("User has signed in: " + user.getEmail()); 


       } else { 
        // User is signed out 
        Log.d(TAG, "onAuthStateChanged:signed_out"); 
       } 
       // ... 
      } 
     }; 

でユーザーがnullに等しくないかどうかをチェックするifブロック。これは、ユーザー名を入力する別のアクティビティにインテントを変更する必要がある場所です。基本的には、ユーザーがすでにユーザー名を持っていてサインインしている場合は、ホーム画面のアクティビティに誘導され、サインアップしている場合はユーザー名を作成するアクティビティに移動する必要があります。どのアクティビティを送信する必要があるかを知るためには、コードをfirebaseデータベースで調べ、アカウントにユーザ名があるかどうかを確認する必要があります。

 mRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Log.d(TAG, "This: "+dataSnapshot.getValue()); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

dataSnapshotsを使用しています唯一の方法は、(他の人による)、データベースから読み取ることがあればそのようなOnDataChangeのメソッドを通じてであるように私はこのような状況でfirebaseからデータを読み取る方法を見つけ出すことはできません、それはそうです。この問題は、このコードがデータがデータベースに追加されたときにのみ起動されるため、ユーザーが単純にサインアップしていてデータベースにユーザー名を追加したことがない場合、このメソッドはコードを実行しません。特定のユーザーにデータがあるかどうかを確認するために、データベースからデータを照会するために照会するにはどうすればよいですか?

答えて

3

OnDatachangeは、すべての場合で発生します。ユーザーがデータを追加したり、データを削除したり、データの変更を行ったりした場合。

チェックするには、すでにユーザ名を持っているユーザーで行う OnDataChangeのの内側に、この:user_bioは、テキストを設定存在する場合、このexempleで

if (user !=null){ 
      DatabaseReference myRef = database.getReference("users").child(user.getUid()).child("user_bio"); 

      myRef.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        if (dataSnapshot.exists()){ 
         bio.setText(dataSnapshot.getValue(String.class)); 

        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
     } 

if(dataSnapshot.exists()){ 
//GO TO OTHER ACTIVITY 
]else{ 
//GO TO SET USER DATA ACTIVITY 
] 

が私の実装の1つのこのexempleを参照してください。ない場合はuserbioには何もしません。ユーザーが私のアプリに初めてログインするとき、このメソッドは何もしませんが、ユーザーがバイオを追加すると、このメソッドはバイオテキストをuserbioテキストに設定します。私はいくつかのテキストを表示したい場合は、私は単に他のナ追加しexempleのためのバイオにテキストを設定し、ユーザーhasntバイオ場合:

if (user !=null){ 
      DatabaseReference myRef = database.getReference("users").child(user.getUid()).child("user_bio"); 

      myRef.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        if (dataSnapshot.exists()){ 
         bio.setText(dataSnapshot.getValue(String.class)); 
        }else{ 
         bio.setText("no user bio"); 
        } 
       } 
       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
     } 
+0

私はこれを理解していますが、ユーザーが何も入力していないために何もデータがない場合、これは起動しません。理由はありません。 – dylan

+0

私が自分のアプリの1つで使っている方法の1つを説明するのを手助けする。 –

+0

ああ私は今見ます!これは完全にうまくいきました – dylan

1

は、あなたがのonCreateメソッド内addValueEventListenerを使用しようとすることがありますか?

onCreateメソッド内のリスナーでアクティビティを実行すると、アクティビティを開いたときに1回起動されます。だから私はあなたがここで問題を起こすべきではないと思う。

+0

上記のmRef.addValueEventListenerはonCreateにありますが、データが変更されるか、または何らかの方法で削除されるまで、onDataChange内のメソッドは実行されないため、誰かが追加されていないとこのコードは実行されませんデータベースへの情報はまだありません。 – dylan

+0

奇妙ですが、何が間違っているのか分かりませんが、データが変更、追加、削除されなくても、データベースからデータを呼び出すために常にonDataChangeを使用していたため、問題が本当にどこにあるかをデバッグする必要があります。それはすでに私のためにデータを取得するために一度解雇されている.. – UmarZaii

関連する問題