Android google plus登录中的空指针异常

Android google plus登录中的空指针异常,android,nullpointerexception,google-plus-signin,Android,Nullpointerexception,Google Plus Signin,我是android新手。我正在我的应用程序中集成google plus登录。但它在mConnectionResult.hasResolution处显示空指针异常 这是我的密码 btnSignIn = (SignInButton) findViewById(R.id.btn_sign_in); btnSignIn.setOnClickListener(this); mGoogleApiClient = new GoogleApiClient.Builder(this)

我是android新手。我正在我的应用程序中集成google plus登录。但它在mConnectionResult.hasResolution处显示空指针异常 这是我的密码

 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();
    }
}
ResolveSignError()中此行出现Nullpointer异常

请帮帮我。这是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)

您使用的是旧的Google Sign方法(在play services 8.3之前)。如果您构建的应用程序使用了Google的旧登录,那么您将构建一个尝试连接到GoogleAppClient的应用程序。此时,用户会看到一个帐户选择器和/或一个权限对话框,这两个对话框都会触发连接失败

您必须处理这些连接故障才能登录。一旦GoogleAppClient连接,则认为用户已登录,可以授予权限

请参阅此以处理此类故障,并使用该方法实现登录

现在最好的选择是使用play services 8.3试用新的Google登录。它可以减少摩擦,自动为您处理此类连接故障

参考

也可以查看android开发者的官方博客以获取更多信息


您仅在
OnConnectionFailed
回调中初始化
mcconnectionresult
ResolveSignError()
方法甚至在此回调之前就被调用,因此
mConnectionResult
为空


您可以执行空检查,也可以确保您的回调方法在调用之前被触发。要确认,只需在
onConnectionFailed()
resolvesignerror()
中添加日志即可。你会注意到谁先被呼叫

确保
mConnectionResult
不为空。如果运行了
signInWithGplus()
,则我看不到任何地方正在初始化
mConnectionResult
。您是否初始化了对象
mConnectionResult
?@Apurva是的,我已初始化it@Priyanka您能将代码张贴在您获得
mConnectionResult
的地方吗?您是否正在使用GoogleAppClient.getConnectionResult()?@Henry McConnectionResult=result;在onConnectionFailedI中,我尝试使用play services 8.3,但仍然显示相同error@Priyanka在play services 8.3中使用新的登录流,即使用GSO(谷歌登录选项)对象。查看以上链接。
  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)