Я хочу внедрить MVVM в свое приложение вместе с Firebase. Я читал во многих блогах, что трансформации - это то, что мне нужно, чтобы связать модель представления с репозиторием, но я все еще не могу это сделать.
Я хочу обновить "callbackSignUp" со значением "callback" в репозитории после "обратного вызова" обновляется. Я знаю, что, вероятно, мое Преобразование неверно, но я хотел бы получить ответы на следующие вопросы:
1) Какой код необходим для запуска приложения?
2) Нужно ли добавить функция трансформации? И к чему применяется эта функция?
3) Многие используют «input ->» после своего источника, но что это значит? И нужно ли мне это в функции?
4) Если возможно, объясните мне функцию map и switchmap. Прочитав его много раз, я все еще не понимаю.
Спасибо:)
Viewmodel
public class SignUpViewmodel extends AndroidViewModel {
private UserRepository userRepo;
public LiveData<Boolean> callbackSignUp = Transformations.map(userRepo.callback, input -> {
if (input.booleanValue()){
return true;
}
return false;
});
public SignUpViewmodel(@NonNull Application application) {
super(application);
userRepo = UserRepository.getInstance();
}
void signUp(String username, String email, String password, Date birthday, char gender, boolean receiveEmail){
userRepo.signUp(email,password);
Log.d(TAG, "signUp: COMPLETE");
}
}
Репозиторий
public class UserRepository {
private static UserRepository instance = null;
private FirebaseAuth mAuth;
public LiveData<Boolean> callback;
public static synchronized UserRepository getInstance(){
if(instance == null){
instance = new UserRepository();
}return instance;
}
public void signUp(String email, String password){
mAuth = FirebaseAuth.getInstance();
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Log.d(TAG, "onComplete: SUCCESS");
callback = new MutableLiveData<>(true);
}else{
Log.d(TAG, "onComplete: FAILED");
callback = new MutableLiveData<>(false);
}
}
});
}
}
Активность
model.callbackSignUp.observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean aBoolean) {
Toast.makeText(SignUpActivity.this, ""+ aBoolean, Toast.LENGTH_SHORT).show();
}
});