2015-12-08 2 views
3

Я новичок в android. Я интегрирую google плюс логин в своем приложении. Но он показывает исключения нулевого указателя на mConnectionResult.hasResolution Это мой кодИсключительное исключение указателя в google плюс логин

btnSignIn = (SignInButton) findViewById(R.id.btn_sign_in); 
    btnSignIn.setOnClickListener(this); 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this).addApi(Plus.API) 
      .addScope(Plus.SCOPE_PLUS_LOGIN).build(); 
} 


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

    if (requestCode == RC_SIGN_IN) { 
     if (resultCode != RESULT_OK) { 
      mSignInClicked = false; 
     } 

     mIntentInProgress = false; 

     if (!mGoogleApiClient.isConnecting()) { 
      mGoogleApiClient.connect(); 
     } 
    } 
} 

protected void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 
} 

protected void onStop() { 
    super.onStop(); 
    if (mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.disconnect(); 
    } 
} 

/** 
* Method to resolve any signin errors 
*/ 
private void resolveSignInError() { 
    if (mConnectionResult.hasResolution()) { 
     try { 
      mIntentInProgress = true; 
      mConnectionResult.startResolutionForResult(this, RC_SIGN_IN); 
     } catch (IntentSender.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 the ConnectionResult for later usage 
     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 onConnected(Bundle arg0) { 
    mSignInClicked = false; 
    if (temp == true) { 
     type = "2"; 
     Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show(); 

     Intent i = new Intent(RegisterSkipActivity.this, MainActivity.class); 
     i.putExtra("Login", type); 
     startActivity(i); 
     temp = false; 
    } 

} 


@Override 
public void onConnectionSuspended(int arg0) { 
    mGoogleApiClient.connect(); 
    //updateUI(false); 
} 

@Override 
public void onClick(View v) { 

    // Signin button clicked 
    signInWithGplus(); 
    temp = true; 

} 

/** 
* Sign-in into google 
*/ 
private void signInWithGplus() { 
    if (!mGoogleApiClient.isConnecting()) { 
     mSignInClicked = true; 
     resolveSignInError(); 
    } 
} 

NullPointer исключение в этой линии в resolveSignInError()

if (mConnectionResult.hasResolution()) 

Пожалуйста, помогите мне. Это Logcat

java.lang.NullPointerException 
     at com.techieweb.solutions.pickeronline.RegisterSkipActivity.resolveSignInError(RegisterSkipActivity.java:214) 
     at com.techieweb.solutions.pickeronline.RegisterSkipActivity.signInWithGplus(RegisterSkipActivity.java:284) 
     at com.techieweb.solutions.pickeronline.RegisterSkipActivity.onClick(RegisterSkipActivity.java:273) 
     at com.google.android.gms.common.SignInButton.onClick(Unknown Source) 
     at android.view.View.performClick(View.java:4439) 
     at android.widget.Button.performClick(Button.java:139) 
     at android.view.View$PerformClick.run(View.java:18395) 
     at android.os.Handler.handleCallback(Handler.java:725) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:176) 
     at android.app.ActivityThread.main(ActivityThread.java:5317) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
     at dalvik.system.NativeStart.main(Native Method) 
+0

Убедитесь, что 'mConnectionResult' не равно нулю. Если запускается 'signInWithGplus()', я не вижу нигде инициализации 'mConnectionResult'. – Sharj

+0

Вы инициализировали объект 'mConnectionResult'? – Apurva

+0

@Apurva да, я инициализировал его – Priyanka

ответ

3

Используется старый метод Google-Sign (перед игровыми услугами 8.3). Если вы создали приложение, которое использовало старый вход с Google, вы бы создали тот, который пытался подключиться к GoogleApiClient. На этом этапе пользователю был предоставлен выборщик учетных записей и/или диалог с разрешениями, оба из которых вызовут сбой подключения.

Вам необходимо будет обработать эти сбои подключения для входа. После подключения GoogleApiClient пользователь считался подписанным и разрешения могли быть предоставлены.

Обратитесь к этому codelab by google, чтобы обработать такие сбои и реализовать знак с использованием этого метода.

Лучшим вариантом является опробовать новый Google-Sign In с игровыми сервисами 8.3. Это больше трений и автоматически обрабатывает подобные сбои подключения для вас.

См. new Google-Sign In.

Также ознакомьтесь с официальным блогом разработчиков Android, чтобы получить дополнительную информацию.

Android Developers Blog- Identity #1

Android Developers Blog- Identity #2

+0

Я пробовал использовать игровые сервисы 8.3, но он показывает ту же ошибку – Priyanka

+0

@Priyanka Используйте новый входной поток с игровыми сервисами 8.3, то есть используя объект GSO (Параметры входа в Google).Проверьте приведенные выше ссылки. –

0

Вы инициализируется только mConnectionResult в OnConnectionFailed обратного вызова. resolveSignInError() метод вызван еще до этого обратного вызова, поэтому mConnectionResult имеет значение null.

Вы можете выполнить нулевую проверку или убедиться, что ваш метод обратного вызова запущен ранее. Чтобы подтвердить, просто добавьте журналы в onConnectionFailed() и в resolveSignInError(). Вы заметите, что вызывается первым.

Смежные вопросы