2017-04-26 78 views
0

正如標題所暗示的,我在獲取Facebook用戶信息(例如名稱,用戶標識等)時得到空指針異常。Android Facebook sdk 4.0:獲取Facebook用戶信息時發生空異常?

我注意到,它發生是由於這些場景:

  • 沒有Facebook應用程序,從Facebook的意圖安裝
  • 用戶登錄(因爲沒有FB應用)。
  • 首次驗證應用程序將導致空指針。

這是我在登錄onSucces代碼片段:

@Override 
public void onSuccess(LoginResult loginResult) { 

    ProfileTracker profileTracker; 

    Profile profile = Profile.getCurrentProfile(); 
    final SocialProfileModel userprofile = new SocialProfileModel(); 

    if(profile == null){ 
     Log.d("user profile", "null"); 
     profileTracker = new ProfileTracker() { 
      @Override 
      protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) { 
       userprofile.setProfileID(currentProfile.getId()); 
       userprofile.setFirst_name(currentProfile.getFirstName()); 
       userprofile.setLast_name(currentProfile.getLastName()); 
       userprofile.setMiddle_name(currentProfile.getMiddleName()); 
       userprofile.setProfile_pic(currentProfile.getProfilePictureUri(200,200).toString()); 
      } 
     }; 
    }else { 

     userprofile.setProfileID(profile.getId()); 
     userprofile.setUserName(profile.getName()); 
     userprofile.setFirst_name(profile.getFirstName()); 
     userprofile.setLast_name(profile.getLastName()); 
     userprofile.setMiddle_name(profile.getMiddleName()); 
     userprofile.setProfile_pic(profile.getProfilePictureUri(200,200).toString()); 
    } 

    tv1.setText(profile.getId()); 
    tv2.setText(profile.getName()); 



} 

我所知道的東西像輪廓和令牌跟蹤器,但我不能讓我如何能夠利用這些正義這個問候!

任何幫助非常感謝! 謝謝!

編輯:

包括的是事件的堆棧跟蹤:

04-26 16:20:10.671 2580至2580年/ 包名/AndroidRuntime:致命異常:主 過程:packagename,PID:2580 java.lang.RuntimeException:將結果ResultInfo {who = null,request = 64206,result = -1,data = Intent {(has extras)}}傳遞給活動{packagen ame .MainActivity}:java.lang.NullPointerException:嘗試在android.app.ActivityThread.deliverResults(ActivityThread。)上的null對象引用 上調用虛擬方法'java.lang.String java.lang.String.toString()'。 (ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java())在android.app.ActivityThread.OfficeHandleMessage(ActivityThread.java) :1533) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.Activity Thread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) at com .android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 引起:java.lang.NullPointerException:嘗試調用虛擬方法'java.lang.String java.lang.String.toString()'on a空對象參考 at com.agmostudio.socialsdk.socialsdk.MainActivity $ 1 $ 1.onSuccess(MainActivity.java:98) at com.agmostudio.socialsdk.socialsdk_lib.login.facebook.FacebookLogin.onSuccess(FacebookLogin.java:97) 在com.agmo在com.facebook.login.LoginManager.finishLogin(LoginManager。)上輸入:studio.socialsdk.socialsdk_lib.login.facebook.FacebookLogin.onSuccess(FacebookLogin.java:26) 。Java的:577) 在com.facebook.login.LoginManager.onActivityResult(LoginManager.java:216) 在com.facebook.login.LoginManager $ 1.onActivityResult(LoginManager.java:159) 在com.facebook.internal.CallbackManagerImpl .onActivityResult(CallbackManagerImpl.java:82) at com.agmostudio.socialsdk.socialsdk_lib.login.facebook.FacebookLogin.onActivityResult(FacebookLogin.java:65) at com.agmostudio.socialsdk.socialsdk_lib.login.SocialLoginManager.getOnActivityResult(SocialLoginManager .java:103) at com.agmostudio.socialsdk.socialsdk.MainActivity.onActivityResult(MainActivity.java:556) at android.app.A ctivity.dispatchActivityResult(Activity.java:6932) 在android.app.ActivityThread.deliverResults(ActivityThread.java:4085) 在android.app.ActivityThread.handleSendResult(ActivityThread.java:4132) 在android.app.ActivityThread。 -wrap20(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1533) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop (Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.in voke(本機方法) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

+0

爲什麼不使用圖形API來獲取這些信息? –

+0

使用圖形api和使用Profile有什麼區別? –

+0

哦。並嘗試使用graphrequest.newrequestme。不工作! –

回答

0

嘗試添加該兩行的onCurrentProfileChanged方法

this.stopTracking(); 
Profile.setCurrentProfile(currentProfile); 

而這profileTracker =新ProfileTracker()

profileTracker.startTracking(); 
後的下一行

喜歡這個:

@Override 
public void onSuccess(LoginResult loginResult) { 

    ProfileTracker profileTracker; 

    Profile profile = Profile.getCurrentProfile(); 
    final SocialProfileModel userprofile = new SocialProfileModel(); 

    if(profile == null){ 
     Log.d("user profile", "null"); 
     profileTracker = new ProfileTracker() { 
      @Override 
      protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) { 

       this.stopTracking(); 
       Profile.setCurrentProfile(currentProfile); 

       userprofile.setProfileID(currentProfile.getId()); 
       userprofile.setFirst_name(currentProfile.getFirstName()); 
       userprofile.setLast_name(currentProfile.getLastName()); 
       userprofile.setMiddle_name(currentProfile.getMiddleName()); 
       userprofile.setProfile_pic(currentProfile.getProfilePictureUri(200,200).toString()); 
      } 
     }; 
     profileTracker.startTracking(); 
    }else { 

     userprofile.setProfileID(profile.getId()); 
     userprofile.setUserName(profile.getName()); 
     userprofile.setFirst_name(profile.getFirstName()); 
     userprofile.setLast_name(profile.getLastName()); 
     userprofile.setMiddle_name(profile.getMiddleName()); 
     userprofile.setProfile_pic(profile.getProfilePictureUri(200,200).toString()); 
    } 

    tv1.setText(profile.getId()); 
    tv2.setText(profile.getName()); 



} 
相關問題