作者:血玉残阳 | 来源:互联网 | 2023-02-09 19:41
1> Mohit Chauha..:
我有同样的错误!你在这里忽略的是onDataChange()的异步性质,并且没有记录的原因是在你完成检索数据之前有一个错误.要解决这个问题,你需要在onDataChange()中实现一个回调机制,如下所示:
public interface OnGetDataListener {
//make new interface for call back
void onSuccess(DataSnapshot dataSnapshot);
void onStart();
void onFailure();
}
然后,创建一个readData方法来从snapShot读取数据,所有这些都是在读取数据时调用onSuccess方法.
public void readData(DatabaseReference ref, final OnGetDataListener listener) {
listener.onStart();
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
listener.onSuccess(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
listener.onFailure();
}
});
}
最后,在setUser方法中,实现onSuccess方法中需要执行的所有操作.我觉得这样的事情应该有效.
public void setUser(DatabaseReference ref) {
readData(ref, new OnGetDataListener() {
@Override
public void onSuccess(DataSnapshot dataSnapshot) {
//whatever you need to do with the data
}
@Override
public void onStart() {
//whatever you need to do onStart
Log.d("ONSTART", "Started");
}
@Override
public void onFailure() {
}
});
}