Anonymous
Пример входа в систему с использованием модернизации, MVVM, Livedata в Android
Сообщение
Anonymous » 29 июл 2025, 17:04
Я проверил эту статью, но наблюдаю за изменениями ответа в MainActivity. < /p>
Вот мой код для loginrepo < /strong> < /p>
Код: Выделить всё
public MutableLiveData checkLogin(LoginRequestModel loginRequestModel) {
final MutableLiveData data = new MutableLiveData();
Map params = new HashMap();
params.put("email", loginRequestModel.getEmail());
params.put("password", loginRequestModel.getPassword());
apiService.checkLogin(params)
.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
data.setValue(response.body());
Log.i("Response ", response.body().getMessage());
}
}
@Override
public void onFailure(Call call, Throwable t) {
data.setValue(null);
}
});
return data;
}
< /code>
Вот мой код loginViewModel < /strong> < /p>
public class LoginViewModel extends ViewModel {
public MutableLiveData emailAddress = new MutableLiveData();
public MutableLiveData password = new MutableLiveData();
Map params = new HashMap();
LoginRepo loginRepo;
private MutableLiveData loginResponseModelMutableLiveData;
public LiveData getUser() {
if (loginResponseModelMutableLiveData == null) {
loginResponseModelMutableLiveData = new MutableLiveData();
loginRepo = LoginRepo.getInstance();
}
return loginResponseModelMutableLiveData;
}
//This method is using Retrofit to get the JSON data from URL
private void checkLogin(LoginRequestModel loginRequestModel) {
loginResponseModelMutableLiveData = loginRepo.checkLogin(loginRequestModel);
}
public void onLoginClick(View view) {
LoginRequestModel loginRequestModel = new LoginRequestModel();
loginRequestModel.setEmail(emailAddress.getValue());
loginRequestModel.setPassword(password.getValue());
params.put("email", loginRequestModel.getEmail());
params.put("password", loginRequestModel.getPassword());
checkLogin(loginRequestModel);
}
< /code>
} < /p>
Вот мой код для loginactivity < /strong> < /p>
private LoginViewModel loginViewModel;
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loginViewModel = ViewModelProviders.of(this).get(LoginViewModel.class);
binding = DataBindingUtil.setContentView(LoginActivity.this, R.layout.activity_main);
binding.setLifecycleOwner(this);
binding.setLoginViewModel(loginViewModel);
loginViewModel.getUser().observe(this, new Observer() {
@Override
public void onChanged(@Nullable LoginResponseModel loginUser) {
if (loginUser != null) {
binding.lblEmailAnswer.setText(loginUser.getUser().getId());
Toast.makeText(getApplicationContext(), loginUser.getUser().getId(), Toast.LENGTH_SHORT).show();
}
}
});
}
< /code>
onLoginClick< /code> Метод, используемый в LoginViewModel, использует livedata. < /p>
Ответ, исходящий от API, в порядке. Но onchange () это не показано, как использовать Livedata, используя шаблон MVVM в простом примере входа в систему. Пожалуйста, помогите!
Подробнее здесь:
https://stackoverflow.com/questions/560 ... in-android
1753797845
Anonymous
Я проверил эту статью, но наблюдаю за изменениями ответа в MainActivity. < /p> Вот мой код для loginrepo < /strong> < /p> [code]public MutableLiveData checkLogin(LoginRequestModel loginRequestModel) { final MutableLiveData data = new MutableLiveData(); Map params = new HashMap(); params.put("email", loginRequestModel.getEmail()); params.put("password", loginRequestModel.getPassword()); apiService.checkLogin(params) .enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { data.setValue(response.body()); Log.i("Response ", response.body().getMessage()); } } @Override public void onFailure(Call call, Throwable t) { data.setValue(null); } }); return data; } < /code> Вот мой код loginViewModel < /strong> < /p> public class LoginViewModel extends ViewModel { public MutableLiveData emailAddress = new MutableLiveData(); public MutableLiveData password = new MutableLiveData(); Map params = new HashMap(); LoginRepo loginRepo; private MutableLiveData loginResponseModelMutableLiveData; public LiveData getUser() { if (loginResponseModelMutableLiveData == null) { loginResponseModelMutableLiveData = new MutableLiveData(); loginRepo = LoginRepo.getInstance(); } return loginResponseModelMutableLiveData; } //This method is using Retrofit to get the JSON data from URL private void checkLogin(LoginRequestModel loginRequestModel) { loginResponseModelMutableLiveData = loginRepo.checkLogin(loginRequestModel); } public void onLoginClick(View view) { LoginRequestModel loginRequestModel = new LoginRequestModel(); loginRequestModel.setEmail(emailAddress.getValue()); loginRequestModel.setPassword(password.getValue()); params.put("email", loginRequestModel.getEmail()); params.put("password", loginRequestModel.getPassword()); checkLogin(loginRequestModel); } < /code> } < /p> Вот мой код для loginactivity < /strong> < /p> private LoginViewModel loginViewModel; private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); loginViewModel = ViewModelProviders.of(this).get(LoginViewModel.class); binding = DataBindingUtil.setContentView(LoginActivity.this, R.layout.activity_main); binding.setLifecycleOwner(this); binding.setLoginViewModel(loginViewModel); loginViewModel.getUser().observe(this, new Observer() { @Override public void onChanged(@Nullable LoginResponseModel loginUser) { if (loginUser != null) { binding.lblEmailAnswer.setText(loginUser.getUser().getId()); Toast.makeText(getApplicationContext(), loginUser.getUser().getId(), Toast.LENGTH_SHORT).show(); } } }); } < /code> onLoginClick< /code> Метод, используемый в LoginViewModel, использует livedata. < /p> Ответ, исходящий от API, в порядке. Но onchange () [/code] это не показано, как использовать Livedata, используя шаблон MVVM в простом примере входа в систему. Пожалуйста, помогите! Подробнее здесь: [url]https://stackoverflow.com/questions/56091402/login-example-using-retrofit-mvvm-livedata-in-android[/url]