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

У меня есть 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.

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

Отметьте кнопку щелчка после вставки данных в 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 } } } } 

Вы в зависимости от SharedPreferences а также от SharedPreferences переменной, вы можете зависеть от SharePreferences но не от переменной, потому что при каждом запуске вы устанавливаете значение SharePreferences для 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); 

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

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

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

В начале 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 из этого проекта

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

  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

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

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

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

Попробуйте использовать следующие пользовательские методы 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); } 

Я думаю, что это может быть ответ. На ваш код, 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 } } } 
  //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» ложным показателем страницы регистрации, показывая страницу входа в систему.