空指针异常 - Android 中 Google 帐户的 GoogleAuthUtil 身份验证

Posted

技术标签:

【中文标题】空指针异常 - Android 中 Google 帐户的 GoogleAuthUtil 身份验证【英文标题】:Null Pointer Exception - GoogleAuthUtil Authentication on Google Account in Android 【发布时间】:2013-04-01 19:13:47 【问题描述】:

我正在开发一个应用程序,该应用程序通过 Google 进行身份验证以从用户的 Google 帐户中获取用户的个人资料照片和姓名。目前,我只是尝试打印从 Google 收到的令牌作为调试措施,以验证它是否可以正常工作。但是,我一直有一个空令牌(它似乎根本没有设置),给出以下错误:

java.lang.NullPointerException
com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
com.sp.norsesquare.froyo.NorseSquare$LoginAsyncTask.doInBackground(NS.java:465)
com.sp.norsesquare.froyo.NorseSquare$LoginAsyncTask.doInBackground(NS.java:1)
android.os.AsyncTask$2.call(AsyncTask.java:287)
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
java.util.concurrent.FutureTask.run(FutureTask.java:137)
android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
java.lang.Thread.run(Thread.java:856)

我正在使用自定义 AsyncTask 类来获取数据并将其返回给主 Activity,这被定义为主 Activity 中的公共类。

public class LoginAsyncTask extends AsyncTask<String, Void, String>

NS ns;
String email;
String mScope;
String authToken;
Context context;
Bundle bundle;

public LoginAsyncTask(String e)

    email = e;
    bundle = new Bundle();


protected void onPreExecute()

    Log.i("BEGIN","Getting authtoken");


protected String doInBackground(String... args)

    try 
    
        authToken = GoogleAuthUtil.getToken(context, email, "oauth2:"+"https://www.googleapis.com/auth/userinfo.profile", bundle);
        Log.i("MESSAGEGEGEGE","YOUR TOKEN = "+authToken);

    
    catch (UserRecoverableAuthException recoverableException) 
        Toast.makeText(context, "UserRecoverableException Occurred", Toast.LENGTH_LONG).show();
        Log.e("GOOGLEAUTH","UserRecoverableException Triggered");
         Intent recoveryIntent = recoverableException.getIntent();


      catch (GoogleAuthException authEx) 

         Log.e("MESSAAGEGEG", "Unrecoverable authentication exception: " + authEx.getMessage(), authEx);
      catch (IOException ioEx) 
         Log.i("MESSAGEGEGE", "transient error encountered: " + ioEx.getMessage());

     
       catch (Exception e) 
           e.printStackTrace();
       
    return authToken;


protected void onProgressUpdate(Integer... progress)

    Log.i("PROGRESS","Getting somewhere");


protected void onPostExecute(String result) 


    Log.i("GOOGLEAUTH", "Returning Received Google Token");
    googleAuthToken = result;
        //This is a variable defined in the main activity
    



我有点不知道这是从哪里来的,在任何地方都找不到任何东西。非常感谢您的帮助,谢谢!

【问题讨论】:

看起来Context context 为空。 从什么时候开始,GoogleAuthUtil.getToken() 方法开始为未在设备上注册的电子邮件抛出带有消息“BadUsername”的 GoogleAuthException,而不是之前带有消息“Non existing account”的异常 IllegalArgumentException '电子邮件地址'” ? developer.android.com/reference/com/google/android/gms/auth/…, java.lang.String, java.lang.String) 这曾经对我有用,但就在几天前它停止工作,现在它抛出这个错误 com.google.android.gms.auth.GoogleAuthException: Unknown。知道为什么吗?我的瞄准镜有问题吗? gist.github.com/lawloretienne/7351151 【参考方案1】:

根据 Arhimed 的建议,您传递给 getToken() 的上下文可能为空。当我将一些东西拼凑在一起以进行快速而肮脏的测试时,这发生在我身上。传递给它一个有效的上下文解决了这个错误。

【讨论】:

以上是关于空指针异常 - Android 中 Google 帐户的 GoogleAuthUtil 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Google Game Center 中的空指针异常

GoogleSignInOptions 中的 requestIdToken 获取空指针异常

如何修复 Google DataFlow Pipeline (args) 空指针异常?

Android中的导航抽屉空指针异常

android 中遇到的空指针异常

android 中遇到的空指针异常