2017-10-16 60 views
0

我試圖在用戶使用Google帳戶登錄後保存谷歌電子郵件地址,名稱和個人資料照片網址。當有谷歌的默認配置文件圖片登錄的用戶,應用程序崩潰。它的工作原理與具有自定義配置文件照片應用程序崩潰,同時保存G +照片網址

谷歌賬戶下面是相關代碼:

private void handleSignInResult(GoogleSignInResult result){ 

     Log.d(TAG,"handleSignInResult():"+result.isSuccess()); 
     if(result.isSuccess()){ 
      GoogleSignInAccount account = result.getSignInAccount(); 
      String pname = account.getDisplayName(); 
      String emailid = account.getEmail(); 
      String pic_url = new String(account.getPhotoUrl().toString()); 

      SharedPreferences userInfo = context.getSharedPreferences(getString(R.string.USER_INFO),Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor = userInfo.edit(); 
      editor.putString("name",pname); 
      editor.putString("email",emailid); 
      editor.putString("pic_url",pic_url); 
      editor.commit(); 
      updateUI(true); 
     } else { 
      updateUI(false); 
     } 
    } 

這裏是logcat的與異常的部分:

--------- beginning of crash 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: FATAL EXCEPTION: main 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: Process: org.csikjsce.csi_kjsceofficial, PID: 32355 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=7, result=-1, data=Intent { (has extras) }} to activity {org.csikjsce.csi_kjsceofficial/org.csikjsce.csi_kjsceofficial.LoginActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.toString()' on a null object reference 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at android.app.ActivityThread.deliverResults(ActivityThread.java:4112) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at android.app.ActivityThread.handleSendResult(ActivityThread.java:4155) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at android.app.ActivityThread.access$1600(ActivityThread.java:186) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1658) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:111) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at android.os.Looper.loop(Looper.java:238) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6016) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:937) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:798) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.toString()' on a null object reference 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at org.csikjsce.csi_kjsceofficial.LoginActivity.handleSignInResult(LoginActivity.java:179) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at org.csikjsce.csi_kjsceofficial.LoginActivity.onActivityResult(LoginActivity.java:207) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at android.app.Activity.dispatchActivityResult(Activity.java:6657) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: at android.app.ActivityThread.deliverResults(ActivityThread.java:4108) 
10-16 20:02:33.731 32355 32355 E AndroidRuntime: ... 9 more 

線沒有。 207個電話handleSignResult()

線沒有。 179 String pic_url = new String(account.getPhotoUrl().toString());

註釋掉線179個修復這個問題,但我就不能保存照片的網址,我需要證明我的應用程序用戶的個人資料照片。

該錯誤僅適用於在其Google帳戶中擁有默認個人資料照片的用戶。

我刪除了我的谷歌加上照片,以測試它。當我簽名時,該應用程序崩潰。然後,我檢查了我的谷歌照片網址加上從Chrome瀏覽器帳戶,我得到這個網址https://lh3.googleusercontent.com/-eKoJemxhXNk/AAAAAAAAAAI/AAAAAAAAAAA/ACnBePZ9iFrmxpc1l5CPyKJ4DRH14A_Scg/s60-p-rw-no-mo/photo.jpg

URL是類似於具有自定義個人資料照片登錄帳戶時被保存在shared_pref.xml的一個。 上面的url是getPhotoUrl()必須返回的內容。它絕對不是null,但我仍然在getPhotoUrl()。toString()和應用程序崩潰上得到NPE。

有人可以解釋爲什麼會發生這種情況嗎?

回答

0

錯誤解決這個簡單的招:

String pic_url = ""+account.getPhotoUrl(); 

追捕爲getPhotoUrl後()方法我發現 this

我在與DEFAULT_SIGN_IN標誌但第一條件,即配置了標誌,

如果用戶有個人資料圖片

相當於用戶有默認配置文件圖片。因此,所有具有默認配置文件圖片的用戶都不符合第一個條件,因此方法返回null。

相關問題