Беда с Мокси - PullRequest
       7

Беда с Мокси

0 голосов
/ 05 октября 2019

Когда я запускаю приложение, я ввожу электронную почту и пароль, нажимаю кнопку «Ввод» и вижу мой тост и ответ от 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...