Skip to content

Proxies-free.com: 100% Free Daily Proxy Lists Every Day!

Get Free Proxies Every Day

java – Erro Login com MVP no Android

Estou a um tempo tentando desenvolver minha tela de login no padrão MVP pra melhor entender como funciona o padrão, tenho experiencia com JavaWeb e o padrão MVC mas está sendo uma dor de cabeça montar um codigo que funcione direito no padrão MVP.
Codigo da Activity Login

package com.vinitcc.dicarona;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.InputType;
import android.text.TextUtils;
import android.util.Patterns;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.afollestad.materialdialogs.MaterialDialog;
import com.vinitcc.dicarona.Login.LoginInterface;
import com.vinitcc.dicarona.Login.LoginPresenter;

public class LoginActivity extends AppCompatActivity implements LoginInterface.View {
    private Button btn_mostraSenha, btn_login;
    private EditText mEmail;
    private EditText mSenha;
    private LoginInterface.Presenter presenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        btn_mostraSenha = findViewById(R.id.btn_mostraSenha);
        mSenha = findViewById(R.id.editText_senha);
        btn_login = findViewById(R.id.btn_login);
        mEmail = findViewById(R.id.editText_Email);
        presenter = new LoginPresenter(this);

        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                lidaLogin();
            }
        });
    }

    @Override
    public void lidaLogin() {
        if(!eValidoEmail()){
            Toast.makeText(this, "Email Inválido", Toast.LENGTH_SHORT).show();
        }else if(!eValidoSenha()){
            Toast.makeText(this, "Senha Inválida", Toast.LENGTH_SHORT).show();
        }else{
            presenter.toLogin(mEmail.getText().toString(),mSenha.getText().toString());
        }
    }

    @Override
    public void onLogin() {
        Toast.makeText(this, "Logado com sucesso", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onError(String erro) {
        Toast.makeText(this, "Não foi possivel realizar o Login: "+erro, Toast.LENGTH_SHORT).show();
    }

    @Override
    public boolean eValidoEmail() {
        return Patterns.EMAIL_ADDRESS.matcher(mEmail.getText().toString()).matches();
    }

    @Override
    public boolean eValidoSenha() {
        if(TextUtils.isEmpty(mSenha.getText().toString()) || mSenha.getText().toString().length()<4){
            Toast.makeText(this, "Senha Inválida", Toast.LENGTH_SHORT).show();
            mSenha.setError("Senha Inválida");
            return false;
        }else{
            return true;
        }
    }
}

Presenter do Login

package com.vinitcc.dicarona.Login;

import com.vinitcc.dicarona.LoginActivity;
import com.vinitcc.dicarona.Modelo.Cliente;

public class LoginPresenter implements LoginInterface.Presenter, LoginInterface.TaskListener {
    private LoginInterface.Model model;
    private LoginInterface.View view;

    public LoginPresenter(LoginActivity loginActivity) {
        this.model = model;
        this.view = view;
    }

    @Override
    public void onDestroy() {
            view = null;
    }

    @Override
    public void toLogin(String email, String senha) {
        model.doLogin(email,senha);
    }

    @Override
    public void onSuccess() {
        if(view!=null){
        view.onLogin();}
    }

    @Override
    public void onError(String erro) {
        if(view!=null){
        view.onError(erro);}
    }
}

E por ultimo o meu Modelo que cuida da logica

package com.vinitcc.dicarona.Login;

import androidx.annotation.NonNull;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.vinitcc.dicarona.Modelo.Cliente;

public class LoginModel implements LoginInterface.Model {
    private LoginInterface.TaskListener listener;
    private FirebaseAuth auth;

    public LoginModel(LoginInterface.TaskListener listener, FirebaseAuth auth) {
        this.listener = listener;
        this.auth = auth;
    }

    @Override
    public void doLogin(String email, String senha) {
        auth.signInWithEmailAndPassword(email,senha).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful()){
                    //populaVariavel();
                    listener.onSuccess();
                }else if (task.getException()!=null){
                    listener.onError(task.getException().getMessage());
                }else{
                    listener.onError("nunsei");
                }
            }
        });
    }

    @Override
    public void populaVariavel() {

    }
}

Vim da Java Web e nunca tive contato com o MVP, estou tendo dificuldade em me adaptar.
O codigo resulta nesse crash, que acreido que diz que o metodo está vindo com valores nulos, no caso, a mSenha e o mEmail:

java.lang.NullPointerException: Attempt to invoke interface method 'void com.vinitcc.dicarona.Login.LoginInterface$Model.doLogin(java.lang.String, java.lang.String)' on a null object reference
    at com.vinitcc.dicarona.Login.LoginPresenter.toLogin(LoginPresenter.java:22)
    at com.vinitcc.dicarona.LoginActivity.lidaLogin(LoginActivity.java:49)
    at com.vinitcc.dicarona.LoginActivity$1.onClick(LoginActivity.java:37)
    at android.view.View.performClick(View.java:6608)
    at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)
    at android.view.View.performClickInternal(View.java:6585)
    at android.view.View.access$3100(View.java:785)
    at android.view.View$PerformClick.run(View.java:25921)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6864)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

Author AdminPosted on January 15, 2021Categories ArticlesTags android, ERRO, java, login, MVP

Post navigation

Previous Previous post: VBA – create separate spreadsheets from a filtered table
Next Next post: magento2.2 – Global Payments Realex 511 Redirect Issue Magento 2.2.2 HPP
Proxies-free.com: 100% Free Daily Proxy Lists Every Day! Proudly powered by WordPress

DreamProxies - Cheapest USA Elite Private Proxies 100 Private Proxies 200 Private Proxies 400 Private Proxies 1000 Private Proxies 2000 Private Proxies ExtraProxies.com - Buy Cheap Private Proxies Buy 50 Private Proxies Buy 100 Private Proxies Buy 200 Private Proxies Buy 500 Private Proxies Buy 1000 Private Proxies Buy 2000 Private Proxies ProxiesLive Proxies-free.com New Proxy Lists Every Day Proxies123