> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-rn-guide-message-privately.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Login Listeners

> Android Activity and Fragment lifecycle patterns for CometChat login and logout event handling

<Accordion title="AI Integration Quick Reference">
  ```kotlin theme={null}
  // Add login listener
  CometChat.addLoginListener("LISTENER_ID", object : LoginListener() {
      override fun loginSuccess(user: User) { /* Login successful */ }
      override fun loginFailure(e: CometChatException) { /* Login failed */ }
      override fun logoutSuccess() { /* Logout successful */ }
      override fun logoutFailure(e: CometChatException) { /* Logout failed */ }
  })

  // Remove listener
  CometChat.removeLoginListener("LISTENER_ID")
  ```
</Accordion>

This page covers Android-specific lifecycle patterns for `LoginListener`. For the basic add/remove API, see [Authentication](/sdk/android/authentication-overview#login-listener).

## Android Activity/Fragment Example

Register the listener in `onCreate()` and remove it in `onDestroy()` to follow the Android lifecycle. Callbacks provide [`User`](/sdk/reference/entities#user) objects on success and [`CometChatException`](/sdk/reference/auxiliary#cometchatexception) on failure:

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    public class MainActivity extends AppCompatActivity {

        private static final String LISTENER_ID = "LOGIN_LISTENER";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            CometChat.addLoginListener(LISTENER_ID, new CometChat.LoginListener() {
                @Override
                public void loginSuccess(User user) {
                    Log.d("LoginListener", "loginSuccess: " + user.getName());
                    // Initialize user-specific data, navigate to main screen, etc.
                }

                @Override
                public void loginFailure(CometChatException e) {
                    Log.d("LoginListener", "loginFailure: " + e.getMessage());
                }

                @Override
                public void logoutSuccess() {
                    Log.d("LoginListener", "logoutSuccess");
                    // Clean up resources, navigate to login screen, etc.
                }

                @Override
                public void logoutFailure(CometChatException e) {
                    Log.d("LoginListener", "logoutFailure: " + e.getMessage());
                }
            });
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();
            CometChat.removeLoginListener(LISTENER_ID);
        }
    }
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    class MainActivity : AppCompatActivity() {

        private val LISTENER_ID = "LOGIN_LISTENER"

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            CometChat.addLoginListener(LISTENER_ID, object : LoginListener() {
                override fun loginSuccess(user: User) {
                    Log.d("LoginListener", "loginSuccess: ${user.name}")
                    // Initialize user-specific data, navigate to main screen, etc.
                }

                override fun loginFailure(e: CometChatException) {
                    Log.d("LoginListener", "loginFailure: ${e.message}")
                }

                override fun logoutSuccess() {
                    Log.d("LoginListener", "logoutSuccess")
                    // Clean up resources, navigate to login screen, etc.
                }

                override fun logoutFailure(e: CometChatException) {
                    Log.d("LoginListener", "logoutFailure: ${e.message}")
                }
            })
        }

        override fun onDestroy() {
            super.onDestroy()
            CometChat.removeLoginListener(LISTENER_ID)
        }
    }
    ```
  </Tab>
</Tabs>

<Warning>
  Always remove login listeners when they're no longer needed (e.g., in `onDestroy()` or when navigating away). Failing to remove listeners can cause memory leaks and duplicate event handling.
</Warning>

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Authentication" icon="key" href="/sdk/android/authentication-overview">
    Login methods, Auth Key vs Auth Token, and logout
  </Card>

  <Card title="Real-Time Listeners" icon="bell" href="/sdk/android/real-time-listeners">
    Register listeners for messages, users, groups, and calls
  </Card>

  <Card title="Connection Status" icon="wifi" href="/sdk/android/connection-status">
    Monitor connection status to CometChat servers
  </Card>

  <Card title="Setup SDK" icon="gear" href="/sdk/android/setup">
    Initialize the SDK before logging in users
  </Card>
</CardGroup>
