Когда я запускаю приложение, я ввожу электронную почту и пароль, нажимаю кнопку «Ввод» и вижу мой тост и ответ от openWeatherApi в SnackBar. Но когда я поворачиваю экран, кажется, что новая функция LoginActivity не получает команды от ViewState, потому что Toast и Snackbar не отображаются. Что нужно сделать, чтобы все это заработало?
public class LoginActivity extends MvpAppCompatActivity implements LoginView {
private EditText editTextEmail;
private EditText editTextPass;
@InjectPresenter
LoginPresenter loginPresenter;
@ProvidePresenter
LoginPresenter getLoginPresenter(){
return new LoginPresenter(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
editTextEmail = findViewById(R.id.editTextLoginEmail);
editTextPass = findViewById(R.id.editTextLoginPassword);
loginPresenter.onAttach(this);
}
public void Login(View view) {
String email = editTextEmail.getText().toString().trim();
String pass = editTextPass.getText().toString().trim();
if (email.isEmpty() || pass.isEmpty()) {
Toast.makeText(this, "Все поля должны быть заполнены", Toast.LENGTH_SHORT).show();
} else {
User user = new User(email, pass);
loginPresenter.findUserInDB(user);
}
}
@Override
public void SignIn() {
Toast.makeText(this, "Вход выполнен", Toast.LENGTH_SHORT).show();
loginPresenter.getWeather();
}
@Override
public void ShowError(String string) {
if (string.isEmpty()){
Toast.makeText(this, "Логин и/или пароль введен неверно", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Произошла ошибка получения данных с сервера", Toast.LENGTH_SHORT).show();
Log.i("TEST", string);}
}
@Override
public void ShowWeather(String temp, String weather) {
final View rootView = getRootView();
if(rootView != null) {
final Snackbar snackbar = Snackbar.make(getRootView(), weather + "\nТемпература: " + temp, Snackbar.LENGTH_INDEFINITE);
snackbar.setAction(R.string.ok, new View.OnClickListener() {
@Override
public void onClick(View v) {
snackbar.dismiss();
}
});
snackbar.show();
}
}
public void Register(View view) {
Intent intent = new Intent(this, RegisterActivity.class);
startActivity(intent);
}
@Override
protected void onDestroy() {
loginPresenter.onDestroy();
super.onDestroy();
}
private View getRootView() {
final ViewGroup contentViewGroup = findViewById(android.R.id.content);
View rootView = null;
if(contentViewGroup != null)
rootView = contentViewGroup.getChildAt(0);
if(rootView == null)
rootView = getWindow().getDecorView().getRootView();
return rootView;
}
}
@InjectViewState
public class LoginPresenter extends MvpPresenter<LoginView> implements MainContract.LoginPresenter {
private LoginView loginViewInterface;
private MainContract.LoginRepository repository;
private Double lat = 51.509865;
private Double lon = -0.118092;
private CompositeDisposable compositeDisposable = new CompositeDisposable();
public LoginPresenter(Context context) {
repository = LoginRepository.getInstance(context);
}
public void onAttach(LoginView loginViewInterface){
this.loginViewInterface = loginViewInterface;
}
@Override
public void findUserInDB(User user) {
if(repository.findUserInDb(user) != null){
loginViewInterface.SignIn();
} else {
loginViewInterface.ShowError("");
}
}
@Override
public void getWeather() {
ApiFactory apiFactory = ApiFactory.getInstance();
ApiService apiService = apiFactory.apiService();
compositeDisposable.add(apiService.getWeather(lat,lon,ApiService.API_KEY,ApiService.LANG,ApiService.UNITS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<AllWeather>() {
@Override
public void accept(AllWeather allWeather) throws Exception {
loginViewInterface.ShowWeather(Double.toString(allWeather.getTemp().getTemp()),allWeather.getWeather().get(0).getDescription());
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
loginViewInterface.ShowError(throwable.getMessage());
}
}));
}
public void onDestroy(){
this.loginViewInterface = null;
if (compositeDisposable != null) {
compositeDisposable.dispose();
}
loginViewInterface = null;
}
}
public interface LoginView extends MvpView {
void SignIn();
void ShowError(String string);
void ShowWeather(String temp, String weather);
}