首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Firebase SignOut在GetCurrentUser.GetUid上返回null

Firebase SignOut在GetCurrentUser.GetUid上返回null
EN

Stack Overflow用户
提问于 2017-12-22 21:51:40
回答 2查看 196关注 0票数 0

我有一个小问题,在我的onStop从我的MainActivity即时消息上传到firebase一些数据,所以,如果我切换到我的注销活动快速并按下SignOut,我执行了一个SignOut,但在我登出的时候数据仍在上传,所以,当我登出我的GetCurrentUser = null,所以数据不能继续上传和我的应用程序崩溃,在我的注销我想检查用户是否在注销之前上传了所有内容,我在我的MainActivity.class中添加了onCompletionListeners,这样我就可以处理用户是否为空,但它一直崩溃。我想我需要在按下SignOut按钮之前检查一下,所以,我检查数据是否都上传了,然后LogOut,我在过去的一周里一直在关注这个问题,它变得越来越烦人。

这是我在MainActivity.class中的上传

代码语言:javascript
运行
复制
myref.putStream(groups)
                            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                                @Override
                                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                                    @SuppressWarnings("VisibleForTests") Uri downloadUrlGrupos = taskSnapshot.getDownloadUrl();

                                        mDatabase.child("Users").child(mAuth.getCurrentUser().getUid()).child("groups").setValue(downloadUrlGrupos.toString(), new DatabaseReference.CompletionListener() {
                                            @Override
                                            public void onComplete(DatabaseError databaseError, DatabaseReference groupsReference) {
                                                if(groupsReference!=null){
                                                    Log.d("TAG", "Se guardo correctamente url Grupos");
                                                }else
                                                {
                                                    Log.d("TAG", "Error al subir url Grupos");
                                                }


                                            }
                                        }); 





                                }

这是我在另一个类中的SignOut按钮

代码语言:javascript
运行
复制
  button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                @Override
                public boolean onPreferenceClick(Preference preference) {


                   //I think here need to be a check , so i first check if all the data is uploaded to firebase, and then SignOut


                         Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() {
                             @Override
                             public void onResult(@NonNull Status status) {

                                 FirebaseAuth.getInstance().signOut();
                                 mGoogleApiClient.disconnect();
                                 finish();
                             }
                         });

整个OnStop

代码语言:javascript
运行
复制
 @Override
    protected void onStop() {
        super.onStop();


                   if(mAuth.getCurrentUser()!=null){





                    referenciaGrupos.putStream(g)
                            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                                @Override
                                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                                    @SuppressWarnings("VisibleForTests") Uri downloadUrlG = taskSnapshot.getDownloadUrl();

                                        mDatabase.child("user").child(mAuth.getCurrentUser().getUid()).child("URL_g").setValue(downloadUrlG.toString(), new DatabaseReference.CompletionListener() {
                                            @Override
                                            public void onComplete(DatabaseError databaseError, DatabaseReference referenciaG) {
                                                if(referenciaG!=null){
                                                    Log.d("TAG", "Se guardo correctamente url G");
                                                }else
                                                {
                                                    Log.d("TAG", "Error al subir url G");
                                                }


                                            }
                                        }); 





                                }
                            });
                    referenciaPictos.putStream(p).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                            @SuppressWarnings("VisibleForTests") Uri downloadUrlP = taskSnapshot.getDownloadUrl();

    mDatabase.child("User").child(mAuth.getCurrentUser().getUid()).child("URL_p").setValue(downloadUrlP.toString(), new DatabaseReference.CompletionListener() {
        @Override
        public void onComplete(DatabaseError databaseError, DatabaseReference referenciaP) {
            if(referenciaP!=null){

                Log.d("TAG", "Se guardo correctamente url P");
            }else{
                Log.d("TAG", "Error al subir url P");
            }



        }
    }); 



                        }
                    });
                    referenciaF.putStream(fG).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            @SuppressWarnings("VisibleForTests") Uri downloadUrlF = taskSnapshot.getDownloadUrl();


                                mDatabase.child("User").child(mAuth.getCurrentUser().getUid()).child("URL_f").setValue(downloadUrlF.toString(), new DatabaseReference.CompletionListener() {
                                    @Override
                                    public void onComplete(DatabaseError databaseError, DatabaseReference referenciaF) {
                                        if(referenciaF!=null){
                                            Log.d("TAG", "Se guardo correctamente url F");
                                        }else{

                                            Log.d("TAG", "Error al subir url F");
                                        }

                                    }
                                });




                        }
                    });


                   }else{
                       Log.d("TAG","El usuario es null");
                       Toast.makeText(this, "ERROR, SUBIENDO ARCHIVOS", Toast.LENGTH_SHORT).show();
                   }
    }
EN

回答 2

Stack Overflow用户

发布于 2017-12-22 21:57:39

保存任何数据前,请检查当前用户是否为空。

代码语言:javascript
运行
复制
 myref.putStream(groups)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                            @SuppressWarnings("VisibleForTests") Uri downloadUrlGrupos = taskSnapshot.getDownloadUrl();

                            if (mAuth.getCurrentUser() != null) {
                                mDatabase.child("Users").child(mAuth.getCurrentUser().getUid()).child("groups").setValue(downloadUrlGrupos.toString(), new DatabaseReference.CompletionListener() {
                                    @Override
                                    public void onComplete(DatabaseError databaseError, DatabaseReference groupsReference) {
                                        if (groupsReference != null) {
                                            Log.d("TAG", "Se guardo correctamente url Grupos");
                                        } else {
                                            Log.d("TAG", "Error al subir url Grupos");
                                        }


                                    }
                                });
                            }


                        }
                    });
票数 0
EN

Stack Overflow用户

发布于 2017-12-22 22:05:06

你可以做两件事。

  1. 为上传设置了一个标志。在上传开始之前,你可以放置一个标志。一旦上传完成,就可以通过firebase回调函数设置要删除的标志。因此,当标志打开时,不要让注销按钮被点击。
  2. 为SignOut设置了一个标志。当您单击SignOut按钮时,会打开一个标志。在回调函数中的每个上传请求之后,检查该标志。如果该标志为on,则使SignOut正常工作。

我的观点是第一种方法比第二种方法更通用。但第二个更接近于Firebase中的异步特性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47942656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档