Logout from the application Android

前端 未结 7 1751
旧巷少年郎
旧巷少年郎 2020-12-25 08:43

I have tried to logout from my app when the user clicks on Logout.It is working fine in case the user after login without closing the app if he doed logout .Then it is worki

相关标签:
7条回答
  • 2020-12-25 08:48

    I had similar problem in one of my application; But i got the solution. The problem is, the boolean you have defined isloggingout in your class, it resets after you close your application. Its a variable which stores your value until your application is open. As soon as you close your application it gets reset and your application wont work.. I will suggest you to use Sharedpreference to store that value..

    Good luck

    Updates with example application:

    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>
    

    Try this example and hope this will help you

    0 讨论(0)
  • 2020-12-25 08:54

    You can use the SharedPreferences class in android. It can use to save the value and load it again. This is the docs and tutorial.

    0 讨论(0)
  • 2020-12-25 08:54
      if (!AppState.getSingleInstance().isLoggingOut()) {
    

    do you think this statement correct?? because i saw when this condition is true you finish the activity i think that means logout but isLoggingOut should be true however you check if it is false you call finish. am i right??

    0 讨论(0)
  • 2020-12-25 08:55

    This code is used for logout from app

            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();
    
    0 讨论(0)
  • 2020-12-25 08:56

    case R.id.drawer_item_logout: //name of logout button

                        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]

    0 讨论(0)
  • I noticed that your logout button does start the Login activity but does not finish the Home Page activity. To close the Home Page:

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

    To open it, from the Login Page:

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

    Finish one activity after you start another. This way your task stack will have only one activity, i.e., no back history. Check the example app posted by Vivek Bhusal.

    I suggest reading this SO question, the accepted answer, and also this answer for more ideas on how to perform logout and some caveats with Intent.FLAG_ACTIVITY_CLEAR_TOP, which, in your case, is not really necessary.

    0 讨论(0)
提交回复
热议问题