Intereting Posts
Исключение Proguard при создании release android apk Недостаточно памяти Проблема с утечкой памяти Как смешивать / накладывать два mp3-файла в один mp3-файл (не конкатенировать) Как программно извлекать все и выполнять размеры приложений, использование ЦП? Javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: привязка доверия для пути сертификации не найдена Как загрузить изображение, снятое с камеры в приложении для Android Откройте мою программу для Android после обновления Загружать данные мультиплексирования в JSON с помощью Retrofit? Проблема с нарушениями политики показана для библиотеки или SDK (com.google.ads, com.google.android.gms.internal) Как получить представление в контексте метода TextWatcher? Как реализовать приложения Android-приложения с подстановочными доменами? Как отобразить диалоговое окно «Да / Нет» на Android? Google Play Store: приложения не требуют дополнительных специальных разрешений Как создать заставку (экран отображается, когда приложение запускается)? Android: закрытие базы данных SQLite

Выход из приложения Android

Я попытался выйти из своего приложения, когда пользователь нажмет на Logout.It работает нормально, если пользователь после входа в систему, не закрывая приложение, если он выполнил выход из системы. Затем он работает правильно. Кнопка будет неэффективной в случае, если снова появится Страница входа в систему после входа в систему. Но когда пользователь после входа в систему закрывает приложение, а затем он выходит из системы, страница входа не показывает, что она показывает мне пустую страницу

Код

public class AppState { private static AppState singleInstance; private boolean isLoggingOut; private AppState() { } public static AppState getSingleInstance() { if (singleInstance == null) { singleInstance = new AppState(); } return singleInstance; } public boolean isLoggingOut() { return isLoggingOut; } public void setLoggingOut(boolean isLoggingOut) { this.isLoggingOut = isLoggingOut; } } 

OnClick выхода

 logout.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { SharedPreferences myPrefs = getSharedPreferences("MY", MODE_PRIVATE); SharedPreferences.Editor editor = myPrefs.edit(); editor.clear(); editor.commit(); AppState.getSingleInstance().setLoggingOut(true); Log.d(TAG, "Now log out and start the activity login"); Intent intent = new Intent(HomePage.this, LoginPage.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } }); 

В LoginActivity

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == MAIN_ACTIVITY_REQUEST_CODE) { if (!AppState.getSingleInstance().isLoggingOut()) { finish(); } else { AppState.getSingleInstance().setLoggingOut(false); super.onActivityResult(requestCode, resultCode, data); } } else { super.onActivityResult(requestCode, resultCode, data); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); } 

Пожалуйста, предложите мне, что я сделал неправильно в этом

После ваших предложений Vivek Bhusal я попытался использовать sharedpref

Выход на главную страницу

 logout.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { SharedPreferences myPrefs = getSharedPreferences("Activity", MODE_PRIVATE); SharedPreferences.Editor editor = myPrefs.edit(); editor.clear(); editor.commit(); //AppState.getSingleInstance().setLoggingOut(true); setLoginState(true); Log.d(TAG, "Now log out and start the activity login"); Intent intent = new Intent(HomePage.this, LoginPage.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } }); private void setLoginState(boolean status) { SharedPreferences sp = getSharedPreferences("LoginState", MODE_PRIVATE); SharedPreferences.Editor ed = sp.edit(); ed.putBoolean("setLoggingOut", status); ed.commit(); } 

На странице входа

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { SharedPreferences sp = getSharedPreferences("LoginState", MODE_PRIVATE); boolean stateValue = sp.getBoolean("setLoggingOut", false); if (requestCode == MAIN_ACTIVITY_REQUEST_CODE) { if (!stateValue) { finish(); } else { //AppState.getSingleInstance().setLoggingOut(false); updateLoginState(false); super.onActivityResult(requestCode, resultCode, data); } } else { super.onActivityResult(requestCode, resultCode, data); } } 

Тем не менее та же проблема показывает пустой экран, когда я снова перезапускаю приложение, а затем выполняю выход из системы.

Solutions Collecting From Web of "Выход из приложения Android"

Я заметил, что ваша кнопка выхода из системы запускает активность входа, но не завершает работу домашней страницы. Чтобы закрыть домашнюю страницу:

 Intent intent = new Intent(HomePage.this, LoginPage.class); startActivity(intent); finish() // This call is missing. 

Чтобы открыть его, от страницы входа:

 Intent intent = new Intent(LoginPage.this, HomePage.class); startActivity(intent); finish() 

Завершите одно действие после запуска другого. Таким образом, ваш стек задач будет иметь только одно действие, т. Е. Не будет предыстории. Посмотрите пример приложения, опубликованного Вивеком Бхусалом.

Я предлагаю прочитать этот вопрос SO , принятый ответ , а также этот ответ для получения дополнительных идей о том, как выполнить выход из системы и некоторые оговорки с Intent.FLAG_ACTIVITY_CLEAR_TOP , что в вашем случае не обязательно.

Вы можете использовать класс SharedPreferences в android. Он может использовать, чтобы сохранить значение и загрузить его снова. Это документы и учебники .

  if (!AppState.getSingleInstance().isLoggingOut()) { 

Вы считаете это утверждение правильным? Потому что я видел, когда это условие истинно, вы завершаете действие, я думаю, что это означает, что выход из системы, но isLoggingOut должен быть правдой, однако вы проверяете, является ли он ложным, вы называете завершение. я прав??

У меня была аналогичная проблема в одном из моих приложений; Но я получил решение. Проблема в том, что логическое вы определили isloggingout в своем классе, оно сбрасывается после закрытия вашего приложения. Его переменная, которая сохраняет ваше значение, пока ваше приложение не будет открыто. Как только вы закроете приложение, оно будет сброшено, и ваше приложение не будет работать. Я предлагаю вам использовать Sharedpreference для хранения этого значения.

Удачи

Обновления с примером приложения:

MainActivity.java

  public class MainActivity extends Activity { SharedPreferences SM; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.loginpage); SM = getSharedPreferences("userrecord", 0); Boolean islogin = SM.getBoolean("userlogin", false); if(islogin){ Intent intent = new Intent(MainActivity.this, Dashboard.class); startActivity(intent); finish(); return; } Button login = (Button) findViewById(R.id.login); final EditText ETuser = (EditText) findViewById(R.id.editText1); final EditText ETpass = (EditText) findViewById(R.id.editText2); login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { String user = ETuser.getText().toString(); String pass = ETpass.getText().toString(); if(user.equalsIgnoreCase("admin") && pass.equalsIgnoreCase("admin")){ Editor edit = SM.edit(); edit.putBoolean("userlogin", true); edit.commit(); Intent intent = new Intent(MainActivity.this, Dashboard.class); startActivity(intent); finish(); }else{ Toast.makeText(getApplicationContext(), "Username/Password Invalid", Toast.LENGTH_LONG).show(); } } }); } } 

Dashboard.java

 public class Dashboard extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button logout = (Button) findViewById(R.id.logout); logout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { SharedPreferences SM = getSharedPreferences("userrecord", 0); Editor edit = SM.edit(); edit.putBoolean("userlogin", false); edit.commit(); Intent intent = new Intent(Dashboard.this, MainActivity.class); startActivity(intent); finish(); } }); } } 

loginpage.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp" > <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" > <requestFocus /> </EditText> <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="textPassword" /> <Button android:id="@+id/login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="login" /> </LinearLayout> 

activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello User" /> <Button android:id="@+id/logout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginLeft="50dp" android:layout_marginTop="57dp" android:text="Logout" /> </RelativeLayout> из <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello User" /> <Button android:id="@+id/logout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginLeft="50dp" android:layout_marginTop="57dp" android:text="Logout" /> </RelativeLayout> 

Попробуйте этот пример и надеюсь, что это поможет вам

onNewIntent() следует использовать в singleTop действиях. Кроме того, я не вижу startActivityForResult() на странице входа / активности.

Пустая страница означает, что ваша активность не настроила свой вид (с помощью setContentView() ).

Я бы предложил переместить ваши « setContentView() » и setContentView() на onResume() на странице входа / активности.

Этот код используется для выхода из приложения

  Intent logoutintent = new Intent(this, LoginActivity.class); startActivity(logoutintent); SharedPreferences loginSharedPreferences; loginSharedPreferences = getSharedPreferences( LoginActivity.MyPREFERENCES, Context.MODE_PRIVATE); Editor editor = loginSharedPreferences.edit(); editor.putString("UniqueId", ""); editor.commit(); finish(); 

Case R.id.drawer_item_logout: // имя кнопки выхода

  AlertDialog.Builder builder=new AlertDialog.Builder(Home.this); //Home is name of the activity builder.setMessage("Do you want to exit?"); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { finish(); Intent i=new Intent(); i.putExtra("finish", true); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // To clean up all activities //startActivity(i); finish(); } }); builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert=builder.create(); alert.show(); break; 

[1]