Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何等待数据发送到Firebase_Android_Firebase_Firebase Authentication - Fatal编程技术网

Android 如何等待数据发送到Firebase

Android 如何等待数据发送到Firebase,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我有一个小问题,我实现了一个注销按钮,问题是当我按下按钮注销应用程序时崩溃,因为我的用户现在是空的,同时它正在向数据库上传一些文件,所以在需要到达用户发布数据时,用户是空的。有没有办法知道或者等到上传到firebase完成后再注销,或者我需要实现一个计时器 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addP

我有一个小问题,我实现了一个注销按钮,问题是当我按下按钮注销应用程序时崩溃,因为我的用户现在是空的,同时它正在向数据库上传一些文件,所以在需要到达用户发布数据时,用户是空的。有没有办法知道或者等到上传到firebase完成后再注销,或者我需要实现一个计时器

 @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方法并且没有错误时->执行您想要的操作。