DEV Community

Discussion on: Adding GraphQL to Your Android Apps with AWS Amplify and AWS AppSync

Collapse
 
xxgoth117xx profile image
xXGoth117Xx

Hi, sure.

My MainActivity code is:

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import com.amazonaws.mobile.client.AWSMobileClient;
import com.amazonaws.mobile.client.Callback;
import com.amazonaws.mobile.client.SignOutOptions;
import com.example.ventasbn.Clientes.ClientFactory;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.navigation.NavigationView;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

private AppBarConfiguration mAppBarConfiguration;
private final String TAG = (MainActivity.class.getSimpleName());

protected void onCreate(Bundle savedInstanceState) {
    androidx.fragment.app.FragmentManager fm = getSupportFragmentManager();
    super.onCreate( savedInstanceState );
    setContentView( R.layout.activity_main );
    ClientFactory.init(this);

    FloatingActionButton fab = findViewById( R.id.fab );
    fab.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AWSMobileClient.getInstance().signOut( SignOutOptions.builder().signOutGlobally(true).build(), new Callback<Void>() {
                @Override
                public void onResult(final Void result) {
                    Log.d(TAG, "signed-out");
                }
                @Override
                public void onError(Exception e) {
                    Log.e(TAG, "sign-out error", e);
                }
            });
            AWSMobileClient.getInstance().signOut();
            finishAffinity(); // Close all activites
        }
    } );

    DrawerLayout drawer = findViewById( R.id.drawer_layout );
    NavigationView navigationView = findViewById( R.id.nav_view );
    mAppBarConfiguration = new AppBarConfiguration.Builder(
            R.id.nav_alimentos, R.id.nav_bebidas, R.id.nav_postres, R.id.nav_carrito, R.id.nav_pagos, R.id.nav_historial)
            .setDrawerLayout(drawer)
            .build();
    NavController navController = Navigation.findNavController( this, R.id.nav_host_fragment );
    NavigationUI.setupWithNavController( navigationView, navController );
}

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate( R.menu.main, menu );
    return true;
}


public boolean onSupportNavigateUp() {
    NavController navController = Navigation.findNavController( this, R.id.nav_host_fragment );
    return NavigationUI.navigateUp( navController, mAppBarConfiguration )
            || super.onSupportNavigateUp();
}

}


The code works but when I close the app with the close all option I have this error:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserPool com.amazonaws.mobile.auth.userpools.CognitoUserPoolsSignInProvider.getCognitoUserPool()' on a null object reference

at com.example.ventasbn.Clientes.ClientFactory.init(ClientFactory.java:21)
at com.example.ventasbn.MainActivity.onCreate(MainActivity.java:40)