Firebaseデータベースからデータを取得しようとしています 2つのフラグメントがあり、1つはサインアップ用、もう1つはサインイン用です Firebaseにデータを挿入することに問題はありませんが、これらは、私の記号からいくつかのコードの断片であることonDataChangeの値はnullを返します
からデータを返すことができず、mは:
mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
user = firebaseAuth.getCurrentUser();
if(user != null)
{
getExistingUserInfo(user.getUid());
}
};
:
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}
私はonCreate
メソッド内でこのコードを持っています
これは、問題は、私は、アプリケーションとgetExistingUserInfo
がonCreate
内で呼び出されます起動すると、それから、ユーザーに署名した最後のデータを返し、私は私のfirebase
public void getExistingUserInfo(String uid){
final FirebaseDatabase database = FirebaseDatabase.getInstance();
database.getReference("allUsers").child(uid)
.orderByChild("emailAddress")
.equalTo(mEmailStr)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.e("Data Changed YEA!",dataSnapshot.toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
からデータをquery
方法であり、私のデバイスが正しく
> E/Data Changed YEA!: DataSnapshot { key =
> vWOypZ07sbeQKEtXnAwbEEV7ml43, value = {password=123456789,
> username=ahmed, sgl=true, [email protected],
> studyGroupName=Study Group 2} }
しかし、私はサインイン押すと、その値を返しますが
をゼロE/Data Changed YEA!: DataSnapshot { key = vWOypZ07sbeQKEtXnAwbEEV7ml43, value = null }
だから、データを正しく取得するには、アプリケーションを閉じてから再度開く必要があります。
ザ・ユーザーが署名されるコードであり、それはclickListener
onCreateView
でメソッド内です:
mAuth.signInWithEmailAndPassword(mEmailStr, mPasswordStr).addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(Task<AuthResult> task) {
if (task.isSuccessful())
{
Toast.makeText(getContext(),"Succeed!",Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(getContext(),"Failed!",Toast.LENGTH_LONG).show();
}
}
});
そして、これは私のdatabase
がどのように見えるかです:
デバッグ 'Log'文を' getExistingUserInf 'uid'と' mEmailStr'の値を表示します。一方または両方がおそらく正しい値ではありません。 –
問題は、getExistingUserInfo()が何度も自動的に呼び出され、なぜアプリケーションが開始された後初めて何回か呼び出されたときに、一度サインインすると呼び出されるということです。私のログのように http://image.prntscr.com/image/34be85f976b8457384bab7347344c5c0.png –
@Frank、私を助けてくれますか? –