Почему я должен нажать 2-3 раза, чтобы заставить работать регистрационную форму? - PullRequest
0 голосов
/ 12 июня 2019

Я ввел регистрационную форму, которая проверяет наличие дублированного имени пользователя и отправьте электронное письмо, прежде чем продолжить сохранение информации в базе данных, а также создание ключа авторизации для каждого пользователя.

Я перепробовал почти все, что знаю, но все еще в стеке. С другой стороны, происходит сбой некоторых устройств при нажатии на форму регистрации

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 голосов
/ 12 июня 2019

Вы делаете что-то не так.У вас есть два логических значения isValid & isValidEmail, которые указываются в обратных вызовах 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) {}
           });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...