сталкивается с проблемой, касающейся модернизации входа в Android - PullRequest
0 голосов
/ 08 ноября 2018

Возникла проблема с модифицированным логином. когда я запускаю приложение на своем мобильном телефоне, я вошел в систему с зарегистрированным пользователем ... вход выполнен успешно ... но когда я вышел из системы и хочу повторно войти в систему с другой учетной записью, «приложение зарегистрировало меня с предыдущей учетной записью» ... я не понимаю, что это за проблема, пожалуйста, помогите. Я не понимаю, почему эта проблема возникает с моим приложением.

Примечание: я использую модификацию (с Firebase) в приложении для регистрации и входа в систему. Спасибо

вот код моего логина

    private Button forgot ;
    private TextView CreactAccount_text;
    private EditText login_email , login_password;
    private ProgressDialog mLoginProgress;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_);
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
        Toolbar toolbar = (Toolbar) findViewById(R.id.login_page_toolbar);
        setSupportActionBar(toolbar);

        if (getSupportActionBar()!= null){
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
        }

        FirebaseApp.initializeApp(this);
//        Realm.init(this);
        // User Session Manager



        Window window = getWindow();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            window.setStatusBarColor(getColor(R.color.login_statusbar_color));
        }
        else {
            window.setStatusBarColor(getResources().getColor(R.color.login_statusbar_color));
        }

        mLoginProgress = new ProgressDialog(this);


        CreactAccount_text = (TextView) findViewById(R.id.ui_crateaccount_text);
        forgot = (Button) findViewById(R.id.ui_btn_forgot);
        forgot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent forgot_password = new Intent(Login_Activity.this , Forgot_Password_Activity.class);
                startActivity(forgot_password);
            }
        });
        CreactAccount_text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent move_signup = new Intent(Login_Activity.this , Signup_Activity.class);
                startActivity(move_signup);
            }
        });

        login_email = (EditText) findViewById(R.id.ui_login_email);
        login_password = (EditText) findViewById(R.id.ui_login_password);
        findViewById(R.id.ui_signin).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                usersignin();
            }
        });
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home)
            finish();
        return super.onOptionsItemSelected(item);
    }
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        overridePendingTransition(
                R.anim.no_anim, R.anim.slide_right_out);
        AppUtils.hideSoftKeyboard(this);
    }

    public void usersignin(){


        final String email = login_email.getText().toString().trim();
        final String password = login_password.getText().toString().trim();


        if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()){
            login_email.setError("Email is not correctly formated");
            login_email.requestFocus();
            return;
        }
        if (password.isEmpty()){
            login_password.setError("password is required");
            login_password.requestFocus();
            return;
        }
        if (password.length() < 6){
            login_password.setError("Password should be atleast 6 characters");
            login_password.requestFocus();
            return;

        }


        if(!TextUtils.isEmpty(email) || !TextUtils.isEmpty(password)){

            mLoginProgress.setTitle("Logging In");
            mLoginProgress.setMessage("Please wait while we check your credentials.");
            mLoginProgress.setCanceledOnTouchOutside(false);
            mLoginProgress.show();

            SharedPreferenceUtil.storeStringValue(Login_Activity.this, Constants.USERNAME,email);
            SharedPreferenceUtil.storeStringValue(Login_Activity.this,Constants.PASSWORD,password);

            RetrofitUtil.createProviderAPI().userLogin(email , password).enqueue(loginUser(this));



        }


    }
    @Override
    public void onLoginUser(RetrofitClientLogin data) {
        if(data.getType().equals(Constants.SUCCESS)){

            FirebaseInstanceId.getInstance().getToken();

            UtilFirebaseAnalytics.logEvent(Constants.EVENT_LOGIN,Constants.KEY_EMAIL,login_email.getText().toString());
            SharedPreferenceUtil.storeBooleanValue(this,Constants.ISUSERLOGGEDIN,true);
            if(getIntent() != null && getIntent().getBooleanExtra(Constants.IS_RESULT_ACTIVITY,false)){
                setResult(RESULT_OK);
            }else{
                hideProgressDialog();
                openAcitivty(Home_Activity.class);

            }
            loginOnFirebase();

        }
    }



    private void loginOnFirebase(){
        final FirebaseAuth mAuth = FirebaseAuth.getInstance();
        FirebaseUser currentUser = mAuth.getCurrentUser();
        if(currentUser == null){
            final String email = login_email.getText().toString();
            final String password = login_password.getText().toString();
            mAuth.signInWithEmailAndPassword(email, password)
                    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (!task.isSuccessful()) {
                                mAuth.createUserWithEmailAndPassword(email, password)
                                        .addOnCompleteListener(Login_Activity.this, new OnCompleteListener<AuthResult>() {
                                            @Override
                                            public void onComplete(@NonNull Task<AuthResult> task) {
                                                hideProgressDialog();
                                                finish();
                                            }
                                        });
                            }else{
                                hideProgressDialog();
                                finish();
                            }
                        }
                    });
        }

    }


    protected void openAcitivty(Class<?> cls) {
        Intent intent = new Intent(this, cls);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
    protected void showProgressDialog(String msg) {
        try {
            if (mLoginProgress != null && !mLoginProgress.isShowing()) {
                mLoginProgress.setMessage(msg);
                mLoginProgress.show();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    protected void hideProgressDialog() {
        try {
            if (mLoginProgress != null && mLoginProgress.isShowing()) {
                mLoginProgress.dismiss();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onSignup(RetrofitClientLogin data) {

    }


    @Override
    public void OnError(String error) {
        hideProgressDialog();
        Toast.makeText(this,error,Toast.LENGTH_LONG).show();

    }

1 Ответ

0 голосов
/ 09 ноября 2018

Вы используете SharedPreferences для хранения учетных данных для входа. Когда пользователь вводит действительные учетные данные (идентификатор и пароль), вы сохраняете его в SharedPreferences в методе usersignin().

SharedPreferenceUtil.storeStringValue(Login_Activity.this, Constants.USERNAME, email);
SharedPreferenceUtil.storeStringValue(Login_Activity.this, Constants.PASSWORD, password);

Теперь я предполагаю (вы только опубликовали LoginActivity и не упомянули другие части), что в вашем приложении есть страница-заставка. Который появляется перед страницей входа. В котором вы решаете, вошел ли пользователь в систему или нет (используя значения SharedPreference). Если да, перенаправьте на домашнюю страницу еще на страницу входа.

Исправление этой проблемы очень просто. Когда пользователь выходит из приложения, вам также необходимо очистить SharedPreferences.

Как это,

SharedPreferenceUtil.storeStringValue(Login_Activity.this, Constants.USERNAME, null);
SharedPreferenceUtil.storeStringValue(Login_Activity.this, Constants.PASSWORD, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...