为什么我必须单击2-3次才能使注册表生效?

时间:2019-06-12 16:03:39

标签: android firebase firebase-authentication

我已经实施了一份注册表,用于检查用户名是否重复 和电子邮件,然后再将信息存储到数据库以及为每个用户创建授权密钥。

我已经尝试了几乎所有我知道的东西,但我仍然处于筹码状态。 另一方面,某些设备在单击注册表格后会崩溃

boolean isValid = false;
    boolean isValidEmail = false;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
       // Log.d(TAG, "validBotsRegisterActivityStart " + isValid + " "  + isValidEmail );

        mAuth = FirebaseAuth.getInstance();
        //currentUserID = mAuth.getUid();
{....}
        loadingBar = new ProgressDialog(this);
CreateAccountButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
             CreateNewAccount();
               }
              });
}

private void CreateNewAccount()
    {
if(TextUtils.isEmpty(password))
        {Toast.makeText(this, "Please add a password", Toast.LENGTH_SHORT).show();
        }

if (!TextUtils.isEmpty(username))
        {
            DatabaseReference reference = FirebaseDatabase.getInstance().getReference("UserNames");
            reference.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot)
                {
                    if (dataSnapshot.hasChild(username.toLowerCase())) {
                        isValid = false; }
                    else {
                        isValid = true; }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {}
           });
        }

       if (!TextUtils.isEmpty(email))
        {
            DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Emails");
            reference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot data: dataSnapshot.getChildren())
                    {
                        Log.d(TAG, "SnapshotRegister" + data);

                        if (data.getValue().toString().equals(email))
                        {
                            isValidEmail = false;
                        }
                        else {
                            isValidEmail = true;

                        }
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            Log.d(TAG, "userEmail " + email);

        }

       if (isValid = true) {
            if (isValid != isValidEmail)
            { Log.d(TAG, "CreateNewAccount: isValidStepBeforeSend " + isValid + isValidEmail); }
            else { storeUserInformationToDabase(); }
        }
    }

    private void storeUserInformationToDabase()
    {
            mAuth.createUserWithEmailAndPassword(email, password)
                    .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull final Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                // loadingBar.dismiss();
                                String s = task.getResult().toString();
                                Log.d(new String("Register : AuthResult"), s);
                                if (s != null) {
                                    String auth = FirebaseAuth.getInstance().getCurrentUser().getUid();
                                    Log.d(new String("Register : AuthResultUID"), auth);
                                    StoreInfo(s, auth);
                                    loadingBar.dismiss();
                                }}}
                    }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {

                    Log.d(new String("Register : Exception"), e.getMessage());
                    loadingBar.dismiss();
                }}); 
}
private void StoreInfo(String s, String auth) {



        loadingBar.setTitle("Registering.. Please wait");
        loadingBar.show();
        loadingBar.setCanceledOnTouchOutside(true);

        HashMap userMap = new HashMap();
        userMap.put("username", username);
userMap.put("email", email);

       UsersRef.child(auth).updateChildren(userMap)
                .addOnCompleteListener(new OnCompleteListener<Location>() {
                    @Override
                    public void onComplete(@NonNull Task task) {
                        if (task.isSuccessful()) {

                            loadingBar.dismiss();
                        }
                    }
                }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {

                Toast.makeText(RegisterActivity.this, "Error: " + e, Toast.LENGTH_SHORT).show();

                //Log.d(new String("Register : UsersRefFail"), e);
                loadingBar.dismiss();
            }
        });

我希望程序能够非常快速地开始和完成,但是用户必须单击2-3次非常快速的注册按钮才能开始工作

从进入该活动之前崩溃的设备 (来自LoginActivity-> RegisterActivity)

Fatal Exception: java.lang.RuntimeException
Canvas: trying to draw too large(132710400bytes) bitmap.
android.view.DisplayListCanvas.throwIfCannotDraw

点击注册按钮进行记录

第一次单击:

2019-06-12 19:33:08.581 4763-4763/apps.stylized D/Register Activity :: userName perdon50
2019-06-12 19:33:08.581 4763-4763/apps.stylized D/Register Activity :: userEmail main@main.com34
{.........}
2019-06-12 19:33:08.784 4763-4763/apps.stylized D/Register Activity :: CreateNewAccount: isValidEmail True

第二次点击:

2019-06-12 19:33:28.995 4763-4763/apps.stylized D/Register Activity :: userName perdon50
2019-06-12 19:33:28.995 4763-4763/apps.stylized D/Register Activity :: userEmail main@main.com34
2019-06-12 19:33:28.997 4763-4763/apps.stylized W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms
2019-06-12 19:33:29.020 4763-4763/apps.stylized D/Register Activity :: SnapshotRegisterDataSnapshot { key = 123jsadkkakjcmmcom23, value = active }
2019-06-12 19:33:29.020 4763-4763/apps.stylized D/Register Activity :: CreateNewAccount: isValidEmail True
2019-06-12 19:33:29.020 4763-4763/apps.stylized D/Register Activity :: SnapshotRegisterDataSnapshot { key = 6b6na2jrsfdw4XPI402EOeLwUpK2, value = main@main.com }
2019-06-12 19:33:29.020 4763-4763/apps.stylized D/Register Activity :: CreateNewAccount: isValidEmail True
2019-06-12 19:33:29.020 4763-4763/apps.stylized D/Register Activity :: SnapshotRegisterDataSnapshot { key = ATquDl2nmtagb3RgrKaaoho3hJw2, value = main@main.com33 }
{.......}
ps.stylized D/Register Activity :: SnapshotRegisterDataSnapshot { key = vlsMPfiY3dagEjCXH2fyQQSAaWa2, value = kios@kios.com1 }
2019-06-12 19:33:29.024 4763-4763/apps.stylized D/Register Activity :: CreateNewAccount: isValidEmail True
2019-06-12 19:33:29.024 4763-4763/apps.stylized D/Register Activity :: SnapshotRegisterDataSnapshot { key = waRZgADTM4OMkFgU5eofSkJhxc62, value = main@main.com8 }
2019-06-12 19:33:29.024 4763-4763/apps.stylized D/Register Activity :: CreateNewAccount: isValidEmail True
2019-06-12 19:33:29.024 4763-4763/apps.stylized D/Register Activity :: SnapshotRegisterDataSnapshot { key = xgWeF0QgGGhWJfQMXhwQPdT1HnR2, value = main@main.com32 }
2019-06-12 19:33:29.024 4763-4763/apps.stylized D/Register Activity :: CreateNewAccount: isValidEmail True
2019-06-12 19:33:29.024 4763-4763/apps.stylized D/Register Activity :: SnapshotRegisterDataSnapshot { key = yBDzyMkBE6UQdKx72UcDmSQL5JC3, value = main@main.com111 }
2019-06-12 19:33:29.024 4763-4763/apps.stylized D/Register Activity :: CreateNewAccount: isValidEmail True
2019-06-12 19:33:29.226 4763-4763/apps.stylized D/Register Activity :: CreateNewAccount: isValidUsrname True
2019-06-12 19:33:30.299 4763-4813/apps.stylized D/FirebaseAuth: Notifying id token listeners about user ( PhscrFDm9uZnSEpbXhycHyHRSKw1 ).
2019-06-12 19:33:30.299 4763-4813/apps.stylized D/FirebaseAuth: Notifying auth state listeners about user ( PhscrFDm9uZnSEpbXhycHyHRSKw1 ).
2019-06-12 19:33:30.299 4763-4763/apps.stylized D/FirebaseApp: Notifying auth state listeners.
2019-06-12 19:33:30.299 4763-4763/apps.stylized D/FirebaseApp: Notified 1 auth state listeners.
2019-06-12 19:33:30.302 4763-4763/apps.stylized D/Register : AuthResult: com.google.firebase.auth.internal.zze@a968cb6
2019-06-12 19:33:30.302 4763-4763/apps.stylized D/Register : AuthResultUID: PhscrFDm9uZnSEpbXhycHyHRSKw1

1 个答案:

答案 0 :(得分:0)

您做错了事。您有两个布尔值isValidisValidEmail,它们在Firebase回调中提供了值。您正在外部回调中检查此isValid != isValidEmail,并且当您单击按钮时,代码将在该时间执行。

在回调中移动条件isValid != isValidEmail

 DatabaseReference reference = FirebaseDatabase.getInstance().getReference("UserNames");
            reference.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot)
                {
                    if (dataSnapshot.hasChild(username.toLowerCase())) {
                        isValid = false; }
                    else {
                        isValid = true; }

             //Here add your next callback 
       DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Emails");
          reference.addValueEventListener(new ValueEventListener() {
              @Override
              public void onDataChange(DataSnapshot dataSnapshot) {
                  for(DataSnapshot data: dataSnapshot.getChildren())
                  {
                    Log.d(TAG, "SnapshotRegister" + data);

                    if (data.getValue().toString().equals(email))
                    {
                        isValidEmail = false;
                    }
                    else {
                        isValidEmail = true;

                    }
                  if (isValid = true) {
            if (isValid != isValidEmail){
         Log.d(TAG, "CreateNewAccount: isValidStepBeforeSend " + isValid + isValidEmail); 
             }
              else { storeUserInformationToDabase(); }
              }
            }
       }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

                }
                @Override
                public void onCancelled(DatabaseError databaseError) {}
           });