我试图从Firebase数据库中获取数据 我有两个碎片,一个用于注册,另一个用于登录 我将数据插入Firebase没有任何问题,但不知怎的,我无法从中返回数据
这些是我登录片段中的一些代码:
var
express = require('express'),
path = require('path'),
app = express();
//option 1 using path!
app.get('/', function( req, res ){
res.sendFile( path.join(__dirname + '/index.html' ) );
})
//option 2 no path module.
app.get('/', function( req, res ){
res.sendFile( __dirname + '/index.html' );
})
app.listen(8080);
console.log('app listens')
我在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
这是我 mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
user = firebaseAuth.getCurrentUser();
if(user != null)
{
getExistingUserInfo(user.getUid());
}
};
query
数据的方法
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) {
}
});
内调用getExistingUserInfo
时,它会正确地从我的设备返回上次登录用户的数据
onCreate
但是当我按下登录时,它的值会返回null
> E/Data Changed YEA!: DataSnapshot { key =
> vWOypZ07sbeQKEtXnAwbEEV7ml43, value = {password=123456789,
> username=ahmed, sgl=true, emailAddress=ahmeddirect@gmail.com,
> 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
的样子:
答案 0 :(得分:1)
好吧,首先我不明白你为什么要使用AuthStateListener
删除onStart
,onStop
和onCreate
中的代码
用此
getExistingUserInfo
public void getExistingUserInfo() {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userID = user.getUid();
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.getReference("allUsers").child(userID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
hashMap = (HashMap<String, String>) dataSnapshot.getValue();
List<String> dataS = new ArrayList<>(hashMap.values());
for (String data : dataS) {
Log.e("Database Data", data);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
在onClickListener
按钮的signin
内发布此方法,应该是
注意:如果您想对返回的数据执行任何操作,则应在返回数据后在
onDataChange
内执行此操作