Android Studio SignUp按钮自动重定向到MainActivity,而不是[SigninActivity through Intent]

4jb9z9bj  于 8个月前  发布在  Android
关注(0)|答案(3)|浏览(60)

我正在开发一个Android App。我参与了登录和注册活动。我有不同的活动登录和注册,并有一个主要活动。现在,当我最初将Firebase数据库与项目连接并实现注册时,它工作得很好(只是显示了我想要的对话框和吐司)。但当我添加了登录使用电子邮件/密码和谷歌也.在那之后,当我看注册它开始表现得很奇怪。首先,它只显示了我在注册的onComplete()上设置的吐司和对话,但现在它也重定向到了主活动。在我观察到我已经将Intent重定向到Sign-in Activity之后。然后从登录,如果成功的用户被重定向到主活动。但现在它的行为不是我想要的注册按钮,它重定向到主活动,但我想移动到登录活动。
这里是注册按钮上的代码。

signUpBinding.buttonSignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //show progress dialogue
            progressDialog.show();

            auth.createUserWithEmailAndPassword(
                    signUpBinding.textEmailsignup.getText().toString(),
                    signUpBinding.textPasswordsignup.getText().toString())
                    .addOnCompleteListener(
                    new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            progressDialog.dismiss();

                            if(task.isSuccessful()){

                                Intent intent = new Intent(SignUpActivity.this,
                                        SignInActivity.class);
                                startActivity(intent);
                                finish();

                                //using Users constructor for signup
                                Users users = new Users(
                                        signUpBinding.textUsernameSignUp.getText().toString(),
                                        signUpBinding.textEmailsignup.getText().toString(),
                                        signUpBinding.textPasswordsignup.getText().toString()
                                );

                               
                                //to get the UID of user from AuthResult
                                String id = task.getResult().getUser().getUid();
                                //setting values in realtime database
                                firebaseDatabase.getReference().child("Users").
                                        //we can use id and username or anyother string as we
                                        // want in the below child to name the user node.
                                        child(signUpBinding.textUsernameSignUp.getText().toString())
                                        .setValue(users);

                                Toast.makeText(SignUpActivity.this, "User Created Successfully ",
                                        Toast.LENGTH_SHORT).show();

                            } else {
                                Toast.makeText(SignUpActivity.this, "Error: "+task.getException()
                                                .getMessage(),
                                        Toast.LENGTH_SHORT).show();
                            }
                        }
                    });

        }
    });

这是logcat在点击注册按钮

{2023-09-04 15:36:43.710 31698-31698 AppTurboService         com.sarmadali.chatmingle             D   getSettingSupport resullt = false mSettingCloudEnable = true
2023-09-04 15:36:43.752 31698-31698 ViewRootIm...g Account] com.sarmadali.chatmingle             D  hardware acceleration = true , fakeHwAccelerated = false, sRendererDisabled = false, forceHwAccelerated = false, sSystemRendererDisabled = false
2023-09-04 15:36:43.724 31698-31698 chatty                  com.sarmadali.chatmingle             I  uid=10376(com.sarmadali.chatmingle) identical 2 lines
2023-09-04 15:36:43.724 31698-31698 AppTurboService         com.sarmadali.chatmingle             D   getSettingSupport resullt = false mSettingCloudEnable = true
2023-09-04 15:36:43.757 31698-31698 InputTransport          com.sarmadali.chatmingle             I  Create ARC handle: 0x75177e3ce0
2023-09-04 15:36:43.758 31698-31698 FirebaseAuth            com.sarmadali.chatmingle             I  Creating user with [email protected] with empty reCAPTCHA token
2023-09-04 15:36:43.776 31698-32101 NetworkSecurityConfig   com.sarmadali.chatmingle             D  No Network Security Config specified, using platform default
2023-09-04 15:36:43.781 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::connect(this=0x7517854000,api=1)
2023-09-04 15:36:43.782 31698-31734 mali_winsys             com.sarmadali.chatmingle             D  EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
2023-09-04 15:36:43.782 31698-32101 System                  com.sarmadali.chatmingle             W  Ignoring header X-Firebase-Locale because its value was null.
2023-09-04 15:36:43.782 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::setBufferCount(this=0x7517854000,bufferCount=3)
2023-09-04 15:36:43.783 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::allocateBuffers(this=0x7517854000)
2023-09-04 15:36:43.795 31698-32101 System.out              com.sarmadali.chatmingle             I  [okhttp]:check permission begin!
2023-09-04 15:36:43.796 31698-32101 System                  com.sarmadali.chatmingle             W  ClassLoader referenced unknown path: system/framework/mediatek-cta.jar
2023-09-04 15:36:43.798 31698-32101 System.out              com.sarmadali.chatmingle             I  [okhttp] e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaUtils
2023-09-04 15:36:44.460 31698-32101 System.out              com.sarmadali.chatmingle             I  [socket]:check permission begin!
2023-09-04 15:36:44.461 31698-32101 System                  com.sarmadali.chatmingle             W  ClassLoader referenced unknown path: system/framework/mediatek-cta.jar
2023-09-04 15:36:44.464 31698-32101 System.out              com.sarmadali.chatmingle             I  [socket] e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaUtils
2023-09-04 15:36:46.041 31698-32101 System.out              com.sarmadali.chatmingle             I  [OkHttp] sendRequest<<
2023-09-04 15:36:47.520 31698-32101 System                  com.sarmadali.chatmingle             W  Ignoring header X-Firebase-Locale because its value was null.
2023-09-04 15:36:47.538 31698-32101 System.out              com.sarmadali.chatmingle             I  [okhttp]:check permission begin!
2023-09-04 15:36:47.539 31698-32101 System.out              com.sarmadali.chatmingle             I  [okhttp]:not MMS!
2023-09-04 15:36:47.539 31698-32101 System.out              com.sarmadali.chatmingle             I  [okhttp]:not Email!
2023-09-04 15:36:47.544 31698-32101 System.out              com.sarmadali.chatmingle             I  [OkHttp] sendRequest<<
2023-09-04 15:36:48.398 31698-32101 FirebaseAuth            com.sarmadali.chatmingle             D  Notifying id token listeners about user ( ikasJsyb4saAFiS0hYVE1Mcggjh2 ).
2023-09-04 15:36:48.399 31698-32101 FirebaseAuth            com.sarmadali.chatmingle             D  Notifying auth state listeners about user ( ikasJsyb4saAFiS0hYVE1Mcggjh2 ).
2023-09-04 15:36:48.420 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::disconnect(this=0x7517854000,api=1)
2023-09-04 15:36:48.424 31698-31698 View                    com.sarmadali.chatmingle             D  [Warning] assignParent to null: this = DecorView@b4df957[Creating Account]
2023-09-04 15:36:48.425 31698-31698 InputTransport          com.sarmadali.chatmingle             I  Destroy ARC handle: 0x75177e3ce0
2023-09-04 15:36:48.504 31698-31698 ViewRootImpl[Toast]     com.sarmadali.chatmingle             D  hardware acceleration = true , fakeHwAccelerated = false, sRendererDisabled = false, forceHwAccelerated = false, sSystemRendererDisabled = false
2023-09-04 15:36:48.509 31698-31698 InputTransport          com.sarmadali.chatmingle             I  Create ARC handle: 0x74b9ec3400
2023-09-04 15:36:48.522 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::connect(this=0x7517854000,api=1)
2023-09-04 15:36:48.523 31698-31734 mali_winsys             com.sarmadali.chatmingle             D  EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
2023-09-04 15:36:48.523 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::setBufferCount(this=0x7517854000,bufferCount=3)
2023-09-04 15:36:48.523 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::allocateBuffers(this=0x7517854000)
2023-09-04 15:36:48.531 31698-31698 ActivityThread          com.sarmadali.chatmingle             W  handleWindowVisibility: no activity for token android.os.BinderProxy@c3e4fba
2023-09-04 15:36:48.532 31698-32113 libMEOW                 com.sarmadali.chatmingle             D  applied 1 plugins for [com.sarmadali.chatmingle]:
2023-09-04 15:36:48.532 31698-32113 libMEOW                 com.sarmadali.chatmingle             D    plugin 1: [libMEOW_gift.so]:
2023-09-04 15:36:48.537 31698-31698 os.typeface             com.sarmadali.chatmingle             D  Already set agent. fontPath:null fontHash:
2023-09-04 15:36:48.644 31698-31698 ActivityThread          com.sarmadali.chatmingle             W  handleWindowVisibility: no activity for token android.os.BinderProxy@1e1f34
2023-09-04 15:36:48.645 31698-32115 libMEOW                 com.sarmadali.chatmingle             D  applied 1 plugins for [com.sarmadali.chatmingle]:
2023-09-04 15:36:48.645 31698-32115 libMEOW                 com.sarmadali.chatmingle             D    plugin 1: [libMEOW_gift.so]:
2023-09-04 15:36:48.649 31698-31698 os.typeface             com.sarmadali.chatmingle             D  Already set agent. fontPath:null fontHash:
2023-09-04 15:36:48.750 31698-31698 PhoneWindow             com.sarmadali.chatmingle             V  DecorView setVisiblity: visibility = 4, Parent = null, this = DecorView@7397a32[]
2023-09-04 15:36:48.753 31698-31698 ViewRootIm...nActivity] com.sarmadali.chatmingle             D  hardware acceleration = true , fakeHwAccelerated = false, sRendererDisabled = false, forceHwAccelerated = false, sSystemRendererDisabled = false
2023-09-04 15:36:48.757 31698-31698 InputTransport          com.sarmadali.chatmingle             I  Create ARC handle: 0x74b9ec3c00
2023-09-04 15:36:48.758 31698-31698 PhoneWindow             com.sarmadali.chatmingle             V  DecorView setVisiblity: visibility = 0, Parent = android.view.ViewRootImpl@2ce4539, this = DecorView@7397a32[MainActivity]
2023-09-04 15:36:48.759 28996-18468 MagicButtonManager      com.transsion.videocallenhancer      E  gained class = com.sarmadali.chatmingle.MainActivity
2023-09-04 15:36:48.784 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::connect(this=0x74ba05f000,api=1)
2023-09-04 15:36:48.786 31698-31734 mali_winsys             com.sarmadali.chatmingle             D  EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
2023-09-04 15:36:48.786 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::setBufferCount(this=0x74ba05f000,bufferCount=3)
2023-09-04 15:36:48.786 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::allocateBuffers(this=0x74ba05f000)
2023-09-04 15:36:48.826 31698-31698 IInputConnectionWrapper com.sarmadali.chatmingle             W  requestCursorAnchorInfo on inactive InputConnection
2023-09-04 15:36:49.126 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::disconnect(this=0x74b9dde000,api=1)
2023-09-04 15:36:49.143 31698-31698 PhoneWindow             com.sarmadali.chatmingle             V  DecorView setVisiblity: visibility = 4, Parent = android.view.ViewRootImpl@ac646c5, this = DecorView@657b90e[SignUpActivity]
2023-09-04 15:36:49.151 31698-31698 View                    com.sarmadali.chatmingle             D  [Warning] assignParent to null: this = DecorView@657b90e[SignUpActivity]
2023-09-04 15:36:49.151 31698-31698 InputTransport          com.sarmadali.chatmingle             I  Destroy ARC handle: 0x75106723e0
2023-09-04 15:36:49.650 31698-32110 System.out              com.sarmadali.chatmingle             I  [socket]:check permission begin!
2023-09-04 15:36:50.491 31698-31734 Surface                 com.sarmadali.chatmingle             D  Surface::disconnect(this=0x7517854000,api=1)
2023-09-04 15:36:50.493 31698-31698 View                    com.sarmadali.chatmingle             D  [Warning] assignParent to null: this = android.widget.LinearLayout{1366271 V.E...... ......ID 0,0-371,72}
2023-09-04 15:36:50.494 31698-31698 InputTransport          com.sarmadali.chatmingle             I  Destroy ARC handle: 0x74b9ec3400
}
mlmc2os5

mlmc2os51#

请尝试删除if(task.isSuccessful())短语。所以会是这样的

@Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        progressDialog.dismiss();

                        

                            Intent intent = new Intent(SignUpActivity.this,
                                    SignInActivity.class);
                            startActivity(intent);
                            finish();

                            //using Users constructor for signup
                            Users users = new Users(
                                    signUpBinding.textUsernameSignUp.getText().toString(),
                                    signUpBinding.textEmailsignup.getText().toString(),
                                    signUpBinding.textPasswordsignup.getText().toString()
                            );

                           
                            //to get the UID of user from AuthResult
                            String id = task.getResult().getUser().getUid();
                            //setting values in realtime database
                            firebaseDatabase.getReference().child("Users").
                                    //we can use id and username or anyother string as we
                                    // want in the below child to name the user node.
                                    child(signUpBinding.textUsernameSignUp.getText().toString())
                                    .setValue(users);

                            Toast.makeText(SignUpActivity.this, "User Created Successfully ",
                                    Toast.LENGTH_SHORT).show();

                        
                    }
qni6mghb

qni6mghb2#

我修改了你的代码。导航并在所有执行完成后完成活动。

signUpBinding.buttonSignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //show progress dialogue
            progressDialog.show();

            auth.createUserWithEmailAndPassword(
                signUpBinding.textEmailsignup.getText().toString(),
                signUpBinding.textPasswordsignup.getText().toString())
                .addOnCompleteListener(
                    new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            progressDialog.dismiss();

                            if(task.isSuccessful()){

                                //using Users constructor for signup
                                Users users = new Users(
                                    signUpBinding.textUsernameSignUp.getText().toString(),
                                    signUpBinding.textEmailsignup.getText().toString(),
                                    signUpBinding.textPasswordsignup.getText().toString()
                                );

                                //to get the UID of user from AuthResult
                                String id = task.getResult().getUser().getUid();
                                //setting values in realtime database
                                firebaseDatabase.getReference().child("Users").
                                    //we can use id and username or anyother string as we
                                    // want in the below child to name the user node.
                                child(signUpBinding.textUsernameSignUp.getText().toString())
                                    .setValue(users);

                                Toast.makeText(SignUpActivity.this, "User Created Successfully ",
                                    Toast.LENGTH_SHORT).show();
                                
                                Intent intent = new Intent(SignUpActivity.this, SignInActivity.class);
                                startActivity(intent);
                                finish();

                            } else {
                                Toast.makeText(SignUpActivity.this, "Error: "+task.getException()
                                    .getMessage(),
                                    Toast.LENGTH_SHORT).show();
                            }
                        }
                    });

        }
    });
voase2hg

voase2hg3#

起初,我无法理解@AbdullahJaved的声明,
if(firebaseAuth.getCurrentUser()!=null)[in SignInActivity],此条件返回true,因为您已在上一个Activity中完成注册,并且firebaseAuth有一个用户针对它。
但是,在我尝试使用下面的代码在SignInActivity的onCreate中进行调试之后,
try { Log.d(“CurrentUser”,“CurrentUser Sign Activity:“+ firebaseAuth.getCurrentUser().getUid());}catch(Exception e){ Log.d(“CurrentUser”,“Failed Sign Activity:“+e); }
我已经意识到,它获得的当前用户是我刚刚注册的用户,通过匹配Logcat和Firebase的用户ID。因此,当它被从SignUpActivity定向到SignInActivity时,下面的代码返回true,因为我们刚刚注册,Firebase有一个用户针对CurrentUser,因此它被重定向到MainActivity。
if(firebaseAuth.getCurrentUser()!=null){Intent intent = new Intent(SignInActivity.this,MainActivity. class); getActivity(int); return(); }
因此,从技术上讲,代码是正确的,并根据指令正常运行。但不幸的是,我不明白为什么会这样?
当我问ChatGpt如何阻止刚刚注册的新用户进入主活动时?
根据ChatGpt,解决这个问题的方法是实现一个用户身份验证和授权系统,到目前为止我还没有这样做。(可能还有其他我不知道的方法)。
ChatGpt的详细信息如下:

**身份验证:**实现用户注册登录系统。您可以使用Firebase身份验证或您自己的后端服务器来实现此目的。确保用户只有在成功注册并登录后才能访问应用的主要功能。
**用户档案管理:**当新用户注册时,将其用户信息存储在您后台服务器的用户档案或本地数据库中。您可能还希望在用户配置文件中包含一个标志或属性,以指示用户是新用户还是已完成某些初始设置。
**MainActivity逻辑:**在您的MainActivity中,检查用户是否经过身份验证,是否被授权访问主功能。您可以通过验证用户的登录状态并检查其用户配置文件属性来执行此操作。如果用户未经授权(例如,因为他们是新用户),您可以将他们重定向到另一个Activity,例如入职Activity或配置文件设置Activity。

相关问题