2013-04-10 98 views
1

我正在開發一個應用程序,其中包括通過Google進行身份驗證以從其Google帳戶抓取用戶的個人資料圖片和名稱。目前,我只是試圖打印出谷歌收到的令牌作爲調試措施,以驗證它是否有效。但是,我始終有一個空令牌(它不會出現在所有設置),給了以下錯誤:空指針異常 - Android中Google帳戶的GoogleAuthUtil身份驗證

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類來獲取數據,並將其返回到主活動,這被定義爲主要活動中的公共課程。

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 
    } 


} 

我有點失落,因爲這是來自哪裏,並且找不到任何地方。我會非常感謝你的幫助,謝謝!

+0

看起來'Context context'爲空。 – 2013-04-10 12:46:19

+0

從何時起,GoogleAuthUtil.getToken()方法開始針對未在設備上註冊的電子郵件拋出帶有「BadUsername」消息的GoogleAuthException,而不是之前發生的帶有消息「Non existing account'email_address'」的異常IllegalArgumentException? http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context,java.lang.String,java.lang.String) – toobsco42 2013-11-06 02:32:35

+0

This used爲我工作,但只是在幾天前它停止工作,現在它引發此錯誤com.google.android.gms.auth.GoogleAuthException:未知。任何想法爲什麼?我的示波器有問題嗎? https://gist.github.com/lawloretienne/7351151 – toobsco42 2013-11-07 17:02:01

回答

0

正如Arhimed建議的那樣,您傳遞給getToken()的上下文可能爲null。當我把一些東西湊在一起進行快速和骯髒的測試時,這發生在我身上。通過一個有效的上下文解決了錯誤。