I am trying to login with Sign in with Google in my app and the onetap is used on a Googlelogin.java file in my native app.
Always failing with the error If I click the login with Google button in the line activityResultLauncher.launch(intentSenderRequest);
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
Code:
Googlelogin.java
public class Googlelogin extends AppCompatActivity implements SocialLoginswwwwwwwwwwwwwwwwwwwwwwwwww, GoogleApiClient.OnConnectionFailedListener {
@RequiresApi(api = Build.VERSION_CODES.DONUT)
@Override
public void login(Context context) {
ActivityResultLauncher<IntentSenderRequest> activityResultLauncher =
registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
try {
SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(result.getData());
String idToken = credential.getGoogleIdToken();
if (idToken != null) {
// Got an ID token from Google. Use it to authenticate
// with your backend.
String email = credential.getId();
String username = credential.getDisplayName();
Toast.makeText(context,"Email : "+email+" Name : "+username, Toast.LENGTH_SHORT).show();
//
//Log.d("TAG", "Got ID token.");
}
} catch (ApiException e) {
e.printStackTrace();
}
}
});
oneTapClient = Identity.getSignInClient(context);
signInRequest = BeginSignInRequest.builder()
.setPasswordRequestOptions(BeginSignInRequest.PasswordRequestOptions.builder()
.setSupported(true)
.build())
.setGoogleIdTokenRequestOptions(BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
.setSupported(true)
.setServerClientId("885176601647-qnk12j18ln08dhhhal4lgprmlrreor1q.apps.googleusercontent.com")
.setFilterByAuthorizedAccounts(true)
.build())
.setAutoSelectEnabled(true)
.build();
oneTapClient.beginSignIn(signInRequest)
.addOnSuccessListener((Activity) context, new OnSuccessListener<BeginSignInResult>() {
@Override
public void onSuccess(BeginSignInResult result) {
// IntentSenderRequest intentSenderRequest = new IntentSenderRequest.Builder(result.getPendingIntent().getIntentSender()).build();
//onActivityResult(0, 10, intentSenderRequest.getFillInIntent());
IntentSenderRequest intentSenderRequest =
new IntentSenderRequest.Builder(result.getPendingIntent().getIntentSender()).build();
activityResultLauncher.launch(intentSenderRequest);
}
})
.addOnFailureListener((Activity) context, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, e.getLocalizedMessage());
Toast.makeText(context,e.getLocalizedMessage(),Toast.LENGTH_SHORT).show();
}
});
}
}
}
I advice you, moving the launcher object creation part to
onCreate()