I use Google plus to log in to the Android app running in Good mode.
When you click exit from any other intention. Displays a null pointer exception.
Also click the login button to go to the next .not page on the login page.
but exit the demo application. It works great.
I was looking for relevant answers. No solutions were found that remain the same.
help me solve the problem.
reference 1
reference 2
I referenced 2 links, but exited the following intent, showing a Null pointer exception.
My exit code:
public void googlePlusLogout() { if (mGoogleApiClient.isConnected()) { Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); mGoogleApiClient.disconnect(); mGoogleApiClient.connect(); updateProfile(false); } }
here is a method call from a different intent for the signin class
otherintent.java
session.logoutUser();
This is my demo code that works great. The same code that I used in my application works fine, but exiting another page does not work. Mapping an exception with a null pointer.
AndroidGooglePlusExample.java
public class AndroidGooglePlusExample extends Activity implements OnClickListener, ConnectionCallbacks, OnConnectionFailedListener { private static final int RC_SIGN_IN = 0; // Google client to communicate with Google private GoogleApiClient mGoogleApiClient; private boolean mIntentInProgress; private boolean signedInUser; private ConnectionResult mConnectionResult; private SignInButton signinButton; private ImageView image; private TextView username, emailLabel; private LinearLayout profileFrame, signinFrame; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); signinButton = (SignInButton) findViewById(R.id.signin); signinButton.setOnClickListener(this); image = (ImageView) findViewById(R.id.image); username = (TextView) findViewById(R.id.username); emailLabel = (TextView) findViewById(R.id.email); profileFrame = (LinearLayout) findViewById(R.id.profileFrame); signinFrame = (LinearLayout) findViewById(R.id.signinFrame); mGoogleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(Plus.API, Plus.PlusOptions.builder().build()).addScope(Plus.SCOPE_PLUS_LOGIN).build(); } protected void onStart() { super.onStart(); mGoogleApiClient.connect(); } protected void onStop() { super.onStop(); if (mGoogleApiClient.isConnected()) { mGoogleApiClient.disconnect(); } } private void resolveSignInError() { if (mConnectionResult.hasResolution()) { try { mIntentInProgress = true; mConnectionResult.startResolutionForResult(this, RC_SIGN_IN); } catch (SendIntentException e) { mIntentInProgress = false; mGoogleApiClient.connect(); } } } @Override public void onConnectionFailed(ConnectionResult result) { if (!result.hasResolution()) { GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 0).show(); return; } if (!mIntentInProgress) { // store mConnectionResult mConnectionResult = result; if (signedInUser) { resolveSignInError(); } } } @Override protected void onActivityResult(int requestCode, int responseCode, Intent intent) { switch (requestCode) { case RC_SIGN_IN: if (responseCode == RESULT_OK) { signedInUser = false; } mIntentInProgress = false; if (!mGoogleApiClient.isConnecting()) { mGoogleApiClient.connect(); } break; } } @Override public void onConnected(Bundle arg0) { signedInUser = false; Toast.makeText(this, "Connected", Toast.LENGTH_LONG).show(); getProfileInformation(); } private void updateProfile(boolean isSignedIn) { if (isSignedIn) { signinFrame.setVisibility(View.GONE); profileFrame.setVisibility(View.VISIBLE); } else { signinFrame.setVisibility(View.VISIBLE); profileFrame.setVisibility(View.GONE); } } private void getProfileInformation() { try { if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) { Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); String personName = currentPerson.getDisplayName(); String personPhotoUrl = currentPerson.getImage().getUrl(); String email = Plus.AccountApi.getAccountName(mGoogleApiClient); username.setText(personName); emailLabel.setText(email); new LoadProfileImage(image).execute(personPhotoUrl); // update profile frame with new info about Google Account // profile updateProfile(true); } } catch (Exception e) { e.printStackTrace(); } } @Override public void onConnectionSuspended(int cause) { mGoogleApiClient.connect(); updateProfile(false); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.signin: googlePlusLogin(); break; } } public void signIn(View v) { googlePlusLogin(); } public void logout(View v) { googlePlusLogout(); } private void googlePlusLogin() { if (!mGoogleApiClient.isConnecting()) { signedInUser = true; resolveSignInError(); } } private void googlePlusLogout() { if (mGoogleApiClient.isConnected()) { Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); mGoogleApiClient.disconnect(); mGoogleApiClient.connect(); updateProfile(false); } } // download Google Account profile image, to complete profile private class LoadProfileImage extends AsyncTask<String, Void, Bitmap> { ImageView downloadedImage; public LoadProfileImage(ImageView image) { this.downloadedImage = image; } protected Bitmap doInBackground(String... urls) { String url = urls[0]; Bitmap icon = null; try { InputStream in = new java.net.URL(url).openStream(); icon = BitmapFactory.decodeStream(in); } catch (Exception e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } return icon; } protected void onPostExecute(Bitmap result) { downloadedImage.setImageBitmap(result); } }