Android 如何等待数据发送到Firebase
我有一个小问题,我实现了一个注销按钮,问题是当我按下按钮注销应用程序时崩溃,因为我的用户现在是空的,同时它正在向数据库上传一些文件,所以在需要到达用户发布数据时,用户是空的。有没有办法知道或者等到上传到firebase完成后再注销,或者我需要实现一个计时器Android 如何等待数据发送到Firebase,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我有一个小问题,我实现了一个注销按钮,问题是当我按下按钮注销应用程序时崩溃,因为我的用户现在是空的,同时它正在向数据库上传一些文件,所以在需要到达用户发布数据时,用户是空的。有没有办法知道或者等到上传到firebase完成后再注销,或者我需要实现一个计时器 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addP
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if(firebaseAuth.getCurrentUser() == null){
Intent mainIntent = new Intent().setClass(
prefs.this, LoginActivity.class);
startActivity(mainIntent);
finish();
}
}
};
我到处都有这个监听器来检查用户是否登录
这是我的注销按钮
Preference button = findPreference(getString(R.string.pref_header_cerrar_sesion));
button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
FirebaseAuth.getInstance().signOut();
finish();
return true;
}
});
您不需要等待,您需要知道数据何时提交。为此,您可以添加一个
完成侦听器
。setValue()和updateChildren()这两个方法都采用可选的完成侦听器,当写入已提交到数据库时调用该侦听器。为此,请使用以下代码:
yourRef.setValue("I'm writing data", new Firebase.CompletionListener() {
@Override
public void onComplete(FirebaseError firebaseError, Firebase firebase) {
if (firebaseError != null) {
Log.d("TAG", "Data could not be saved. " + firebaseError.getMessage());
} else {
Log.d("TAG", "Data saved successfully.");
}
}
});
制作一个进度对话框并在发送请求中显示它。之后,在onSuccess方法中将其删除
mDatabase.child(card).setValue(request).addOnSuccessListener(new
OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//dismiss dialog
}
});
mDatabase.child(card).setValue(request).addOnSuccessListener(新建)
OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
//取消对话框
}
});
signOut()没有回调。我认为Firebase会通过本地数据持久性自动管理它。因此,不必担心注销失败。因此,在oncompletion中,我需要放置Firebase.SignOut流程如下:将数据写入数据库->添加CompletionListener->当调用onComplete方法并且没有错误时->执行您想要的操作。