Я пытаюсь выполнить шаблон MvP, и я разделяю запросы firebase в части модели. Я получаю исключение ссылки на нулевой объект, когда вызываю его на докладчике.
Модель:
public class LoginModelz implements LoginContract.LoginModelz {
private LoginPresenter loginPresenter;
FirebaseAuth mAuth; //= FirebaseAuth.getInstance();
FirebaseUser currentuser;// = mAuth.getCurrentUser();
public LoginModelz(LoginPresenter loginPresenter) {
this.loginPresenter = loginPresenter;
}
public void FirebaseQuery(){
mAuth = FirebaseAuth.getInstance();
currentuser = mAuth.getCurrentUser();
}
}
Ведущий:
public class LoginPresenter implements LoginContract.LoginPresenter {
private LoginView loginView;
private LoginModelz loginModelz;
public LoginPresenter(LoginView loginView) {
this.loginView = loginView;
}
public LoginPresenter(LoginModelz loginModelz) {
this.loginModelz = loginModelz;
}
@Override
public void OnLogin(String email, String password,final Context context) {
loginModelz.FirebaseQuery();
Log.e("asda",context.toString());
if (email.isEmpty() && password.isEmpty()){
loginView.OnLoginFail("Email and Password is empty");
return;
}
else if (email.isEmpty()){
loginView.OnLoginFail("Email is empty");
return;
}else if (password.isEmpty()){
loginView.OnLoginFail("Password is empty");
return;
}else {
loginView.ProgressShow("ASDASDASDASDSAd");
Log.e("emailpass", email+password);
**loginModelz.mAuth.signInWithEmailAndPassword(email,password)**
.addOnCompleteListener( new OnCompleteListener<AuthResult>()
Я получал ошибку от loginmodelz.mAuth. Если я помещаю инициализации в метод в классе презентатора, он работает нормально, но когда я отделился, он получает ссылку на нулевой объект.
Интерфейсы
public interface LoginContract {
interface LoginView{
void OnLoginSuccess();
void OnLoginFail(String message);
void Onregister();
void ProgressShow(String messsagge);
void ProgressDismiss(String message);
void Alert();
}
interface LoginPresenter{
void OnLogin(String email,String password,final Context context);
void OnVerify(Context context);
}
interface LoginModelz{
void FirebaseQuery();
}
}
@BrianHoang уже редактировал это, сэр
Он всегда получает ссылку на нулевой объект всякий раз, когда я передаю firebase в часть модели.
Это выглядит подозрительно:
public LoginPresenter(LoginView loginView) {
this.loginView = loginView;
}
public LoginPresenter(LoginModelz loginModelz) {
this.loginModelz = loginModelz;
}
Вы должны определиться со своим конструктором, если вы вызываете первый, у вас нет модели и так далее.
Вы можете создать свою модель внутри первого конструктора и передать ее в качестве аргумента:
public LoginPresenter(LoginView loginView) {
this.loginView = loginView;
this.loginModel = new LoginModel(this);
}
По крайней мере, это то, что я могу предложить из предоставленного вами кода.
Спасибо, это одна из проблем, а также я изменил модель, давая значения переменных Firebase с самого начала FirebaseAuth mAuth = FirebaseAuth.getInstance(); FirebaseUser currentuser = mAuth.getCurrentUser();
Так что, если это принятый ответ, было бы здорово сделать это. Спасибо.
Вы не инициализировали loginModelz. Измените свой конструктор презентатора
public LoginPresenter(LoginView loginView) {
this.loginView = loginView;
this.loginModelz = new LoginModelz(this);
}
Покажите свой код, в котором вы соединяете 3 слоя