Android implementiert Google plus Login Fehler auf mConnectionResult.hasResolution ()

Ich habe google plus Login von https://developers.google.com/+/mobile/android/getting-started studiert

Wenn ich meine app starten, gibt es eine Toastnachricht "User ist verbunden!" Und dann drücke ich G + Sign in Button meine App Kraft schließen.

  • Tutorial - Android Map Pin Drop Animation - Working Right
  • Ist es möglich, meine app durch inbox sms zu öffnen?
  • Wie man runOnUiThread benutzt
  • ERROR: Anwendung erfordert API Version 14. Geräte-API-Version ist 13 (Android 3.2.1)
  • Sende Daten zu einer vorherigen Aktivität zurück
  • Android-Debugger verbirgt lokale Variable
  • Dies ist die Meldungsform Logcat

    04-08 18:31:21.680 24231-24231/app.umitems.test.testgoogleplus1.app D/﹕ onClick() 04-08 18:31:21.680 24231-24231/app.umitems.test.testgoogleplus1.app D/AndroidRuntime﹕ Shutting down VM 04-08 18:31:21.680 24231-24231/app.umitems.test.testgoogleplus1.app W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41f99ce0) 04-08 18:31:21.685 24231-24231/app.umitems.test.testgoogleplus1.app E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: app.umitems.test.testgoogleplus1.app, PID: 24231 java.lang.NullPointerException at app.umitems.test.testgoogleplus1.app.ExampleActivity.resolveSignInError(ExampleActivity.java:68) at app.umitems.test.testgoogleplus1.app.ExampleActivity.onClick(ExampleActivity.java:166) at com.google.android.gms.common.SignInButton.onClick(Unknown Source) at android.view.View.performClick(View.java:4445) at android.view.View$PerformClick.run(View.java:18446) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5081) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) at dalvik.system.NativeStart.main(Native Method) 

    Hier ist mein Code

     package app.umitems.test.testgoogleplus1.app; import android.app.Activity; import android.content.Intent; import android.content.IntentSender; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks; import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.plus.Plus; public class ExampleActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, View.OnClickListener { /* Request code used to invoke sign in user interactions. */ private static final int RC_SIGN_IN = 0; /* Client used to interact with Google APIs. */ private GoogleApiClient mGoogleApiClient; /* A flag indicating that a PendingIntent is in progress and prevents * us from starting further intents. */ private boolean mIntentInProgress; /* Track whether the sign-in button has been clicked so that we know to resolve * all issues preventing sign-in without waiting. */ private boolean mSignInClicked; /* Store the connection result from onConnectionFailed callbacks so that we can * resolve them when the user clicks sign-in. */ private ConnectionResult mConnectionResult; View btn; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_example); mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Plus.API, null) //.addScope(Plus.SCOPE_PLUS_LOGIN) .build(); btn = findViewById(R.id.sign_in_button); btn.setOnClickListener(this); } protected void onStart() { super.onStart(); mGoogleApiClient.connect(); } /* A helper method to resolve the current ConnectionResult error. */ public void resolveSignInError() { Log.d("","resolveSignInError()"); if (mConnectionResult.hasResolution()) { Log.d("","resolveSignInError() mConnectionResult.hasResolution()"); try { mIntentInProgress = true; /*startIntentSenderForResult(mConnectionResult.getIntentSender(), RC_SIGN_IN, null, 0, 0, 0);*/ mConnectionResult.startResolutionForResult(this, // your activity RC_SIGN_IN); } catch (IntentSender.SendIntentException e) { // The intent was canceled before it was sent. Return to the default // state and attempt to connect to get an updated ConnectionResult. Log.d("","resolveSignInError() mConnectionResult.hasResolution() catch"); mIntentInProgress = false; mGoogleApiClient.connect(); } } } protected void onStop() { super.onStop(); if (mGoogleApiClient.isConnected()) { mGoogleApiClient.disconnect(); } } @Override public void onConnected(Bundle bundle){ // We've resolved any connection errors. mGoogleApiClient can be used to // access Google APIs on behalf of the user. mSignInClicked = false; Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show(); } @Override public void onConnectionSuspended(int i){ mGoogleApiClient.connect(); } @Override public void onDisconnected(){ } @Override public void onConnectionFailed(ConnectionResult result) { if (!mIntentInProgress) { // Store the ConnectionResult so that we can use it later when the user clicks // 'sign-in'. mConnectionResult = result; if (mSignInClicked) { // The user has already clicked 'sign-in' so we attempt to resolve all // errors until the user is signed in, or they cancel. resolveSignInError(); } } } /*@Override public void onConnectionFailed(ConnectionResult result){ if (!mIntentInProgress && result.hasResolution()) { try { mIntentInProgress = true;*//* startIntentSenderForResult(result.getIntentSender(), RC_SIGN_IN, null, 0, 0, 0);*//* result.startResolutionForResult(this, // your activity RC_SIGN_IN); } catch (IntentSender.SendIntentException e) { // The intent was canceled before it was sent. Return to the default // state and attempt to connect to get an updated ConnectionResult. mIntentInProgress = false; mGoogleApiClient.connect(); } } }*/ protected void onActivityResult(int requestCode, int responseCode, Intent intent) { if (requestCode == RC_SIGN_IN) { if (responseCode != RESULT_OK) { mSignInClicked = false; } mIntentInProgress = false; if (!mGoogleApiClient.isConnecting()) { mGoogleApiClient.connect(); } } } @Override public void onClick(View view){ Log.d("","onClick()"); if (view.getId() == R.id.sign_in_button && !mGoogleApiClient.isConnecting()) { mSignInClicked = true; resolveSignInError(); } } } 

    Ich habe gerade festgestellt, dass die App automatisch mit Google+ verbunden wird, ohne eine Erlaubnis zu bitten. Ich brauche nicht, um die Schaltfläche zu betätigen, aber ich kann über mein Konto posten. Ist das ein Fehler um Privatsphäre?

  • FFMpeg auf Android, undefined Verweise auf libavcodec Funktionen, obwohl es auf Befehlszeile aufgeführt ist
  • Android: drawable id Änderung nach Ressourcen ändern
  • Benutzerdefinierte Checkbox Bild Android
  • Kopierschutzfallen
  • UI-Widgets in Cardview in Android anzeigen L
  • Best Practices für die Arbeit mit mehreren Tabellen
  • One Solution collect form web for “Android implementiert Google plus Login Fehler auf mConnectionResult.hasResolution ()”

    OK! Also, dass Toast ist, weil Sie angemeldet haben, und wenn Sie auf klicken, versuchen Sie sich erneut zu melden: weil Sie kein Verbindungsergebnis mit einem Fehler haben, um zu lösen, erhalten Sie die NPE.

    So funktioniert es:

    1. Ihr Anmeldezustand wird in Google Play-Diensten gespeichert.
    2. Wenn du eine Verbindung herstellst, verbindet deine App mit Google Play-Diensten und versucht zu sehen, ob du vorher angemeldet hast.
    3. Wenn Sie haben, ruft es zurück zu onConnected.
    4. Wenn du es nicht hast, ruft es zurück zu onConnectionFailed und gibt dir einen ConnectionResult.
    5. Wenn die Verwendung klickt, melden Sie sich an, Sie "lösen den Fehler" auf dem ConnectionResult – das ist nur eine ausstehende Absicht, die den Kontoauswahl- und Zustimmungsbildschirm auslöst.
    6. Wenn der Benutzer zustimmt, wird deine App in onActivityResult zurückgerufen und du schließt wieder (und der Fluß beginnt wieder, diesmal endet bei Schritt 3).

    Also, wenn du anConnected bekommst, solltest du die Schaltfläche "Anschreiben" ausblenden – der Benutzer hat sich angemeldet!

    Nun, vielleicht aus irgendeinem Grund willst du, dass der Benutzer auf die Schaltfläche klicken muss, um loszulegen. Das ist auch gut Im onClick musst du nur testen, ob mPlusClientConnected ist. Wenn es so ist, geh gerade zu dem, was du wolltest, wenn du es schreibst. Wenn nicht, dann lösche das Verbindungsergebnis.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.