我是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();}@OverrIDeprotected 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(); } }}@OverrIDepublic 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(); } }}@OverrIDepublic 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; }}@OverrIDepublic voID onConnectionSuspended(int arg0) { mGoogleapiclient.connect(); //updateUI(false);}@OverrIDepublic voID onClick(VIEw v) { // Signin button clicked signInWithGplus(); temp = true;}/** * Sign-in into Google */private voID signInWithGplus() { if (!mGoogleapiclient.isConnecting()) { mSignInClicked = true; resolveSignInError(); }}
resolveSignInError()中此行的Nullpointer异常
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)
解决方法:
您正在使用旧的Google Sign方法(在play services 8.3之前).如果您构建了一个使用旧版Google登录的应用,那么您将构建一个尝试连接到Googleapiclient的应用.此时,向用户显示了一个帐户选择器和/或一个权限对话框,这两者都会触发连接失败.
您必须处理这些连接失败才能登录.一旦Googleapiclient连接成功,便认为该用户已登录,并且可以授予权限.
请参考codelab by google 以处理此类故障并使用该方法实施登录.
现在最好的选择是尝试使用带播放服务8.3的新Google登录.它的摩擦更少,并且可以自动为您处理此类连接故障.
请参阅new Google-Sign In.
另请查看官方androID开发人员博客以获取更多信息.
Android Developers Blog- Identity #1
Android Developers Blog- Identity #2
总结以上是内存溢出为你收集整理的android-谷歌加登录中的空指针异常全部内容,希望文章能够帮你解决android-谷歌加登录中的空指针异常所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)