Я ввел простую регистрацию по мобильному номеру в шаблоне проектирования MVVM. Но функция Onloaded не вызывается при возврате ответа с сервера.
LoginViewModel
public class LoginViewModel extends ViewModel {
private LoginModel login;
private MutableLiveData<LoginResponse> loginresponse = new MutableLiveData<>();
private LoginRepository loginrepository;
public void init() {
login = new LoginModel();
}
public LoginModel getLogin() {
return login;
}
public void onLoginClick() {
if(login.isPhonevalid()){
HashMap<String,Object> loginObject = new HashMap<>();
loginObject.put("phonenumber",login.getMobileNumber());
loginObject.put("apimethod","beatme");
loginresponse = LoginRepository.getInstance().login(loginObject);
// loginClick.setValue(login);
}
}
@BindingAdapter("error")
public static void setError(EditText editText, String errormessage) {
editText.setError(errormessage);
}
public MutableLiveData<LoginResponse> getLoginresponse() {
return loginresponse;
}
public String getMobileNo(){
return login.getMobileNumber();
}
}
LoginRepository
public class LoginRepository {
private static LoginRepository loginRepository;
private Api api;
public static LoginRepository getInstance() {
if (loginRepository == null) {
loginRepository = new LoginRepository();
}
return loginRepository;
}
public LoginRepository() {
api = RetrofitService.createService(Api.class);
}
public MutableLiveData<LoginResponse> login(HashMap<String, Object> body) {
final MutableLiveData<LoginResponse> loginResponse = new MutableLiveData<>();
api.login(body).enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
if (response.isSuccessful()) {
loginResponse.setValue(response.body());
}
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
loginResponse.setValue(null);
}
});
return loginResponse;
}
}
LoginActivity
public class LoginActivity extends AppCompatActivity {
private LoginViewModel viewModel;
ActivityLoginBinding activityLoginBinding;
boolean doubleBackToExitPressedOnce = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
getSupportActionBar().hide();
activityLoginBinding = DataBindingUtil.setContentView(LoginActivity.this, R.layout.activity_login);
viewModel = ViewModelProviders.of(this).get(LoginViewModel.class);
if (savedInstanceState == null) {
viewModel.init();
}
activityLoginBinding.setLoginViewModel(viewModel);
setuploginclick();
}
public void setuploginclick() {
viewModel.getLoginresponse().observe(this, new Observer<LoginResponse>() {
@Override
public void onChanged(LoginResponse loginResponse) {
Toast.makeText(LoginActivity.this,viewModel.getMobileNo(),Toast.LENGTH_SHORT).show();
Intent i = new Intent(LoginActivity.this, OTPVerify.class);
i.putExtra("mobileno",viewModel.getMobileNo());
startActivity(i);
}
});
}
}
Из журнала видно, что данные опубликованы успешно иОтвет тоже идеален. Но присваивание значения «логин-ответу» для liveata не вызывает наблюдаемого.