如何等待直到Firebase发送数据

时间:2017-12-12 12:21:21

标签: android firebase firebase-authentication

我有一点问题,我实施了一个退出按钮,问题是当我按下按钮退出应用程序崩溃因为我的用户现在为空并且同时它正在向数据库上传一些文件,所以在用户到达用户发布数据所需的时间为空。有没有办法知道或等到上传到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;
                    }
                });

2 个答案:

答案 0 :(得分:1)

您无需等待,您需要知道数据何时提交。为此,您可以添加completion listener。 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.");
        }
    }
});

答案 1 :(得分:0)

创建一个进度对话框,并在发送请求中显示它。之后,用onSuccess方法关闭它

mDatabase.child(card).setValue(request).addOnSuccessListener(new 
OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
         //dismiss dialog
        }
});