При реализации архитектуры MVC, как уведомить класс View о том, что модель наконец получила данные из обращения к firebase - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь реализовать архитектуру MVC в простой регистрации через firebase.

пользователь вставит электронную почту и пароль в представление, затем представление вызовет контроллер

Это фрагмент кода вида (LoginView):

    @Override
    public void onClick(View view) {
        if(view==buttonLogin){
            LoginResult(editTextEmail.getText().toString().trim(),editTextPassword.getText().toString().trim());
        }

    @Override
    public void LoginResult(String email , String password) {
        message = loginController.getInformedLogin(email , password);
        Toast.makeText(this, message ,Toast.LENGTH_SHORT).show();

    }

Это фрагмент кода контроллера (LoginController):

    @Override
    public void getInformedLogin(String email, String password) {
        userm = new UserModel(email , password);
        userm.LoginStatus();
    }

Это фрагмент кода модели (Пользователь):

    @Override
    public void LoginStatus() {
        if(TextUtils.isEmpty(this.email)){
            //email is empty
            ResultMessage= "Please enter an email";
        }
        if(TextUtils.isEmpty(password)){
            //password is empty
            ResultMessage = "Please enter a password";
        }


        firebaseAuth.signInWithEmailAndPassword(this.email,this.password)
                .addOnCompleteListener(UserModel.this ,new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if(task.isSuccessful()){
                            if(firebaseAuth.getCurrentUser().isEmailVerified()){
                                ResultMessage= "Login successful";
                            }else{
                                ResultMessage="You need to verify your email first";
                            }
                        }else{
                            ResultMessage=task.getException().getMessage();
                        }
                    }
                });


    }

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

например, скажем, task.successful равно true. Что мне делать дальше? для того, чтобы уведомить представление класса

Я пытался сделать намерение, но это не сработало Я также попытался передать ссылку на класс представления в конструктор модели, а затем поместил класс представления в setoncompletelistener. Но я думаю, что здесь что-то упущено, но оно не сработало.

Может быть, это не верный способ сделать это, я открыт для любых предложений

Спасибо за ваше время

1 Ответ

0 голосов
/ 16 мая 2019

Нет необходимости создавать новый экземпляр вашего OnCompleteListener каждый раз, когда вы вызываете метод loginStatus. Это может быть переменная в вашем контроллере и вставка в качестве параметра loginStatus. Таким образом, вы решите свою проблему.

В любом случае, я бы посоветовал вам немного углубиться в архитектуру и начать с базовых примеров Clean Arch.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...