-2

hello I have the following error what file can be making the conflict?

I found the project on github This is the error

  1. this error



> it.unipi.iet.namefirebase E/UncaughtException:
> java.lang.NullPointerException: Attempt to invoke virtual method
> 'java.lang.String
> com.google.firebase.auth.FirebaseUser.getProviderId()' on a null
> object reference
>                                              at it.unipi.iet.namefirebase.MainActivity$4$1.onComplete(MainActivity.java:112)
>                                              at com.google.android.gms.tasks.zzc$1.run(Unknown Source)
>                                              at android.os.Handler.handleCallback(Handler.java:739)
>                                              at android.os.Handler.dispatchMessage(Handler.java:95)
>                                              at android.os.Looper.loop(Looper.java:148)
>                                              at android.app.ActivityThread.main(ActivityThread.java:5417)
>                                              at java.lang.reflect.Method.invoke(Native Method)
>                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
>                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
> it.unipi.iet.namefirebase D/FA: Logging event (FE): _ae,
> Bundle[{_o=crash, timestamp=1509341623773, fatal=1}]
> it.unipi.iet.namefirebase V/FA: Using measurement service
> it.unipi.iet.namefirebase V/FA: Connecting to remote service
> com.google.android.gms W/FirebaseAuth: [PhoneNumberAuthPostProcessor]
> postProcess starts com.google.android.gms W/FirebaseAuth:
> [PhoneNumberAuthPostProcessor] postProcess ends
> it.unipi.iet.namefirebase E/AndroidRuntime: FATAL EXCEPTION: main
>                                       Process: it.unipi.iet.namefirebase, PID: 6000
>                                       java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String
> com.google.firebase.auth.FirebaseUser.getProviderId()' on a null
> object reference
>                                           at it.unipi.iet.namefirebase.MainActivity$4$1.onComplete(MainActivity.java:112)
>                                           at com.google.android.gms.tasks.zzc$1.run(Unknown Source)
>                                           at android.os.Handler.handleCallback(Handler.java:739)
>                                           at android.os.Handler.dispatchMessage(Handler.java:95)
>                                           at android.os.Looper.loop(Looper.java:148)
>                                           at android.app.ActivityThread.main(ActivityThread.java:5417)
>                                           at java.lang.reflect.Method.invoke(Native Method)
>                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
>                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
> system_process W/ActivityManager:   Force finishing activity
> it.unipi.iet.namefirebase/.MainActivity ? D/gralloc_ranchu:
> gralloc_alloc: Creating ashmem region of size 1806336
> it.unipi.iet.namefirebase I/FirebaseCrash: Sending crashes ?
> E/EGL_emulation: tid 1208: eglCreateSyncKHR(1881): error 0x3004
> (EGL_BAD_ATTRIBUTE)

Code mainactivity

   package it.unipi.iet.namefirebase;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import iit.unipi.iet.namefirebase.utilities.AuthUtilities;
import it.unipi.iet.namefirebase.utilities.DatabaseUtilities;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FacebookAuthProvider;
import com.google.firebase.auth.FirebaseUser;



public class MainActivity extends Activity{

    public static final String SIGN = "it.unipi.iet.namefirebase.SIGN";
    private final String TAG = "MainActivity";
    private AuthUtilities AuthUt;
    private CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
        setContentView(R.layout.activity_main);


        // Check Authentication
        AuthUt = new AuthUtilities();
        if(AuthUt.getUser() != null ){
            // if user is already logged changes activity
            Log.d(TAG,"User already logged");
            Intent i = new Intent(MainActivity.this,MapsActivity.class);
            startActivity(i);}
        else{
            Log.d(TAG,"User not logged yet");
            }

        // Sign in Button
        final Button SignIn = (Button) findViewById(R.id.button);
        SignIn.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                Intent intent = new Intent(MainActivity.this,LoginActivity.class);
                intent.putExtra(SIGN,"sign-in");
                startActivity(intent);
            }
        });

        // Sign up with email Button
        final Button SignUp = (Button) findViewById(R.id.button2);
        SignUp.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                Intent intent = new Intent(MainActivity.this,LoginActivity.class);
                intent.putExtra(SIGN,"sign-up");
                startActivity(intent);
            }
        });

        // Connect with Facebook button
        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
        LoginButton loginButton = (LoginButton) findViewById(R.id.button3);
        loginButton.setReadPermissions("email", "public_profile");
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.d(TAG, "facebook:onSuccess:" + loginResult);
                handleFacebookAccessToken(loginResult.getAccessToken());

            }

            @Override
            public void onCancel() {
                Log.d(TAG, "facebook:onCancel");
                // ...
            }

            @Override
            public void onError(FacebookException error) {
                Log.d(TAG, "facebook:onError", error);
                // ...
            }
        });

        // Browse as a guest button
        final Button GuestUser = (Button) findViewById(R.id.button4);
        GuestUser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // signin_anonymously
                AuthUt.get_mAuth().signInAnonymously()
                        .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
                            @Override
                            public void onComplete(@NonNull Task<AuthResult> task) {
                                Log.d(TAG, "signInAnonymously:onComplete:" + task.isSuccessful());
                                Log.d(TAG,"User Provider: "+ AuthUt.get_mAuth().getCurrentUser().getProviderId());
                                // start MapsActivity
                                Intent i = new Intent(MainActivity.this,MapsActivity.class);
                                startActivity(i);

                                // If sign in fails, display a message to the user. If sign in succeeds
                                // the auth state listener will be notified and logic to handle the
                                // signed in user can be handled in the listener.
                                if (!task.isSuccessful()) {
                                    Log.w(TAG, "signInAnonymously", task.getException());
                                    Toast.makeText(MainActivity.this, "Authentication failed.",
                                            Toast.LENGTH_SHORT).show();
                                }


                            }
                        });
            }
        });



    }

    @Override
    public void onStart() {
        super.onStart();
        AuthUt.addListner();
    }

    @Override
    public void onStop() {
        super.onStop();
        AuthUt.removeListener();
    }

    /*
     * Disable going back function
     */
    @Override
    public void onBackPressed() {
        // disable going back to the previous Activity
        moveTaskToBack(true);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }

    private void handleFacebookAccessToken(AccessToken token) {
        Log.d(TAG, "handleFacebookAccessToken:" + token);

        AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

        AuthUt.get_mAuth().signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());
                        FirebaseUser user = AuthUt.get_mAuth().getCurrentUser();
                        Log.d(TAG,"url "+user.getPhotoUrl());
                        DatabaseUtilities db = new DatabaseUtilities();
                        db.writeNewUser(user.getUid(),user.getDisplayName(),null,user.getPhotoUrl().toString(),null, null);
                        Log.d(TAG,"Fb user created");
                        // start MapsActivity
                        Intent i = new Intent(MainActivity.this,MapsActivity.class);
                        startActivity(i);
                        // If sign in fails, display a message to the user. If sign in succeeds
                        // the auth state listener will be notified and logic to handle the
                        // signed in user can be handled in the listener.
                        if (!task.isSuccessful()) {
                            Log.w(TAG, "signInWithCredential", task.getException());
                            Toast.makeText(MainActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                        }

                    }
                });
    }




}

ecofaster
  • 1
  • 1

1 Answers1

0

You will have to make a null check before using the object.

 if(yourObject != null)
    {
       int id = yourObject.getProviderId();
    } else{
       // Handle what if null
    }

Also, always make sure if you are uncertain that the object will be null at times, use try{} catch{} block.