Подтвердить что ты не робот

Как заставить приложение перейти на другую страницу, если он не запускается в первый раз

У меня есть RegisterPage и LoginPage. Когда приложение будет запущено, оно проверяет, запускается ли приложение в первый раз или нет в RegisterPage. Если это первый раз, и сохранение button не будет нажато, оно будет в RegisterPage. Если он запускается второй раз, но кнопка сохранения никогда не будет нажата, она останется в RegisterPage тоже. В противном случае он перейдет к LoginPage.

Здесь мой обновленный код

Регистрация

appGetFirstTimeRun();
boolean clicked=false;

 buttonSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                clicked=true;
                int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
                SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
                appPreferences.edit().putInt("app_second_time",
                        appCurrentBuildVersion).apply();
                String name = editTextName.getText().toString();
                String pass = editTextPassword.getText().toString();
                String confirm = editTextConfirm.getText().toString();
                if ((editTextName.getText().toString().trim().length() == 0) || (editTextPassword.getText().toString().trim().length() == 0) || (editTextConfirm.getText().toString().trim().length() == 0)) {
                    Toast.makeText(getApplicationContext(), "Field cannot be null", Toast.LENGTH_LONG).show();
                } 
                else
                 {
                      insertData(name, pass, imageUri); // insert to SQLite
                      Intent intent = new Intent(MainActivity.this, AddMonthlyExpenses.class);
                      intent.putExtra("name", name);
                      startActivity(intent);
                  }
            }
        });

  private int appGetFirstTimeRun() {

        //Check if App Start First Time
        SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
        int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
        int appLastBuildVersion = appPreferences.getInt("app_first_time", 0);

        if (appLastBuildVersion == appCurrentBuildVersion && clicked) {
            Intent intent = new Intent(MainActivity.this,LoginPage.class);
            startActivity(intent);
            return 1;
        } else {
            appPreferences.edit().putInt("app_first_time",
                    appCurrentBuildVersion).apply();
            if (appLastBuildVersion == 0) {
                Toast.makeText(getApplicationContext(), "First time", Toast.LENGTH_SHORT).show();
                return 0; //es la primera vez
            } else {
                return 2; //es una versión nueva
            }
        }
    }

Проблема заключается в том, что я нажимаю кнопку сохранения и выхожу из приложения. Когда я снова запустил приложение, он все еще находится в RegisterPage, а не в LoginPage.

4b9b3361

Ответ 1

Отметьте кнопку щелчка после вставки данных в SQLite, поэтому вы можете подтвердить, что ваши данные успешно сохранены, и вы можете перейти к следующему экрану.

Найдите мои комментарии ниже кода и отредактируйте код: -

public class Register extends AppCompatActivity {
    Button buttonSave;
    boolean clicked=false;//remove this
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        appGetFirstTimeRun();//call this method here
        buttonSave=(Button)findViewById(R.id.button);
        buttonSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                clicked=true;//remove this
                int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
                SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
                appPreferences.edit().putInt("app_second_time", appCurrentBuildVersion).apply();

                String name = editTextName.getText().toString();
                String pass = editTextPassword.getText().toString();
                String confirm = editTextConfirm.getText().toString();
                if ((editTextName.getText().toString().trim().length() == 0) || (editTextPassword.getText().toString().trim().length() == 0) || (editTextConfirm.getText().toString().trim().length() == 0)) {
                    Toast.makeText(getApplicationContext(), "Field cannot be null", Toast.LENGTH_LONG).show();
                }
                else
                {
                    insertData(name, pass, imageUri); // insert to SQLite
                    appPreferences.edit().putBoolean("btn_clicked", true).apply();//add this line
                    Intent intent = new Intent(Register.this, AddMonthlyExpenses.class);
                    intent.putExtra("name", name);
                    startActivity(intent);
                }
            }
        });
    }
    private int appGetFirstTimeRun() {

        //Check if App Start First Time
        SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
        int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
        int appLastBuildVersion = appPreferences.getInt("app_first_time", 0);
        boolean is_btn_click=appPreferences.getBoolean("btn_clicked",false);//add this line

        if ((appLastBuildVersion == appCurrentBuildVersion) && is_btn_click) { //edit this line like this
            Intent intent = new Intent(Register.this,LoginPage.class);
            startActivity(intent);
            return 1;
        } else {
            appPreferences.edit().putInt("app_first_time",
                    appCurrentBuildVersion).apply();
            if (appLastBuildVersion == 0) {
                Toast.makeText(getApplicationContext(), "First time", Toast.LENGTH_SHORT).show();
                return 0; //es la primera vez
            } else {
                return 2; //es una versión nueva
            }
        }
    }
}

Ответ 2

вы зависите от SharedPreferences, а также от переменной clicked, вы можете зависеть от SharePreferences, но не от переменной, потому что при каждом запуске вы устанавливаете значение click для false.

1) Сохраняйте текущую версию при нажатии кнопки

appPreferences.edit().putInt("app_first_time",
                appCurrentBuildVersion).apply();

2) сохранить выбранное значение при нажатии кнопки

appPreferences.edit().putBoolean("clicked",
                true).apply();

Теперь внутри вашего appGetFirstTimeRun() выберите значение версии и нажмите SharedPreferences

int appLastBuildVersion = appPreferences.getInt("app_first_time", 0);
boolean clicked = appPreferences.getBoolean("clicked", false);

Ответ 3

Вам также необходимо изменить значение общих настроек при нажатии кнопки сохранения. Тогда только в следующий раз при открытии приложения appGetFirstTimeRun метод загрузит страницу входа.

В вашем btnSave клик слушателя, где вы начинаете замысел активности непосредственно перед startActivity, добавьте этот код

int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
    SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);

   appPreferences.edit().putInt("app_first_time",
                appCurrentBuildVersion).apply();

Ответ 4

в start метода onCreate();, вызовите checkStages();

в конец метода buttonSave.onClick(), вызовите Prefs.putStage(this, 1);, за которым следует checkStages();

/*Prefs.getStage(this) default value is 0*/

public void checkStages() {

    switch(Prefs.getStage(this)) {
        case 1: //Login Page
            startActivity(new Intent(this, LoginPage.class));
            finish();
            break;
        default:
            break;
    }
}

Это образец Шаблон приложения для Android. Я использую, чтобы написать любое из моих приложений для Android.

Вы можете получить класс Prefs из этого проекта

Ответ 5

добавьте этот код в свой заставку

 SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(context);
    boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", false);
    if (!isFirstRun) {
startActivity(new Intent(context,RegirstorActivity.class));
}else{
startActivity(new Intent(context,LoginActivty.class));
}

поэтому в основном он решит, будет ли он впервые (зарегистрирован пользователем) или нет, после регистрации обновите SharedPreferences

Ответ 6

вы используете переменную клика, чтобы определить, нажата ли кнопка или нет, но когда вы существуете из приложения, а затем нажмите значение reset на значение false, вместо того, чтобы сохранять значение в переменной клика, вы можете использовать общие предпочтения для сохранения значения true или false при нажатии кнопки и получения значения из общего предпочтения для проверки

при нажатии кнопки сохранения

   appPreferences.edit().putInt("app_second_time",
                    appCurrentBuildVersion).apply();   

Ответ 7

Я думаю, что это может быть ответ. на ваш код clicked boolean переменная не сохраняется в общих настройках, но вы проверяете условие внутри appGetFirstTimeRun() (кнопка не может быть нажата при втором запуске, но ваше условие должно быть правдой), поэтому измените свой код на Добавьте эту строку appPreferences.edit().putBoolean("first_run", true).apply(); в buttonSave clicklistener, а затем добавьте эту строку clicked = appPreferences.getBoolean("first_run", false); в appGetFirstTimeRun() функцию и полный код будет.

appGetFirstTimeRun();
boolean clicked=false;

 buttonSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
                SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
                appPreferences = appPreferences.edit().putBoolean("first_run",
                true).apply(); //***Add this ****
                appPreferences.edit().putInt("app_second_time",
                        appCurrentBuildVersion).apply();
                String name = editTextName.getText().toString();
                String pass = editTextPassword.getText().toString();
                String confirm = editTextConfirm.getText().toString();
                if ((editTextName.getText().toString().trim().length() == 0) || (editTextPassword.getText().toString().trim().length() == 0) || (editTextConfirm.getText().toString().trim().length() == 0)) {
                    Toast.makeText(getApplicationContext(), "Field cannot be null", Toast.LENGTH_LONG).show();
                } 
                else
                 {
                      insertData(name, pass, imageUri); // insert to SQLite
                      Intent intent = new Intent(MainActivity.this, AddMonthlyExpenses.class);
                      intent.putExtra("name", name);
                      startActivity(intent);
                  }
            }
        });

  private int appGetFirstTimeRun() {

        //Check if App Start First Time
        SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
        int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
        int appLastBuildVersion = appPreferences.getInt("app_first_time", 0);
        clicked = appPreferences.getBoolean("first_run", false); //*** Add this ***
        if (appLastBuildVersion == appCurrentBuildVersion && clicked) {
            Intent intent = new Intent(MainActivity.this,LoginPage.class);
            startActivity(intent);
            return 1;
        } else {
            appPreferences.edit().putInt("app_first_time",
                    appCurrentBuildVersion).apply();
            if (appLastBuildVersion == 0) {
                Toast.makeText(getApplicationContext(), "First time", Toast.LENGTH_SHORT).show();
                return 0; //es la primera vez
            } else {
                return 2; //es una versión nueva
            }
        }
    }

Ответ 8

Попробуйте использовать следующие пользовательские методы getter и setter.

private static SharedPreferences getInstance(Context context) {
    context.getSharedPreferences("MY_APP", Context.MODE_PRIVATE);
    return sharedPreferences;
}

public boolean getAppStatus(Context context) {
    return getInstance(context).getString("FIRST_TIME", false);
}

public void setAppStatus(Context context, boolean status) {
    getInstance(context).edit().putString("FIRST_TIME", status).commit();
}

Теперь, когда вы впервые вызываете getAppStatus() или в случае, если пользователь не нажал кнопку сохранения даже один раз. Он вернет false. Вы можете обновить значение переменной "FIRST_TIME", когда пользователь нажимает кнопку сохранения на true. Таким образом, проверка того, взаимодействовал ли пользователь со страницей регистрации или нет.

@Override
public void onClick(View v) {
    if(v.getId()==R.id.save_button)
     setAppStatus(context,true);
}

Ответ 9

    //Use shared preference to save.
SharedPreferences preferedName=getSharedPreferences("firstrun", Activity.MODE_PRIVATE);
                SharedPreferences.Editor editor = preferedName.edit();
                editor.putboolean("firstrun",value);
                editor.apply();
                editor.commit();
//and to retrive.
SharedPreferences preferedName=getSharedPreferences("firstrun", Activity.MODE_PRIVATE);
        boolean rstate =preferedName.getString("firstrun",false);

проверьте, является ли "rstste" ложной страницей на странице регистрации, показывая страницу входа.