Android google plus登录中的空指针异常
我是android新手。我正在我的应用程序中集成google plus登录。但它在mConnectionResult.hasResolution处显示空指针异常 这是我的密码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)
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)