2015-10-17 91 views
0

當我通過Facebook登錄按鈕進行連接時,我會啓動一個自定義對話框(位於onSuccess),並且我想在此對話框中輸入連接的人的姓名。它在我在onCreate中調用的佈局中工作(我在連接後出現名稱)。但是當我想在連接之後的對話框所調用的佈局中編寫它時(但它是相同的活動),它不起作用。在對話框中設置Facebook名稱

這裏是我的代碼:

private CallbackManager mCallbackManager2;  
    private ProfileTracker mProfileTracker2; 
    private LoginButton loginbutton2; 

    final Context context = this; 
    private ProfilePictureView fAvatar2; 
    private TextView fName2;  

    private FacebookCallback<LoginResult> mCallback2 = new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      AccessToken accessToken = loginResult.getAccessToken(); 
      Profile profile = Profile.getCurrentProfile(); 

      /* 
       LAUNCH DIALOG ABOUT FACEBOOK CONNEXION 
      */ 

      // custom dialog 
      final Dialog dialogFacebookConnexion = new Dialog(context); 
      dialogFacebookConnexion.setContentView(R.layout.dialog_facebook_connect); 

      Button dialogButton = (Button) dialogFacebookConnexion.findViewById(R.id.dialogOk); 

      dialogButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        dialogFacebookConnexion.dismiss(); 
        Intent intentmainpage = new Intent(InfoAccountActivity.this, MainPageActivity.class); 
        startActivity(intentmainpage); 
       } 
      }); 

      dialogFacebookConnexion.setCanceledOnTouchOutside(false); 
      int dialogHeight = (int) getResources().getDimension(R.dimen.dialog_height); 
      int dialogWidth = (int) getResources().getDimension(R.dimen.dialog_width); 
      dialogFacebookConnexion.getWindow().setLayout(dialogWidth, dialogHeight); 
      dialogFacebookConnexion.show(); 


     } 

     @Override 
     public void onCancel() { 

     } 

     @Override 
     public void onError(FacebookException e) { 

     } 
    }; 




    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     setContentView(R.layout.activity_info_account); 

     mCallbackManager2 = CallbackManager.Factory.create(); 
     loginbutton2 = (LoginButton) findViewById(R.id.login_button2); 
     loginbutton2.setBackgroundResource(R.drawable.facebookconnexion); 
     loginbutton2.setReadPermissions("user_friends"); 
     loginbutton2.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); 
     loginbutton2.registerCallback(mCallbackManager2, mCallback2); 


     fName2 = (TextView) findViewById(R.id.facebookName2); 
     fAvatar2 = (ProfilePictureView) findViewById(R.id.facebook_avatar2); 

     ProfileTracker profileTracker = new ProfileTracker() { 
      @Override 
      protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) { 
       OnProfileChanged(newProfile); 
      } 
     }; 
    } 

    private void OnProfileChanged (Profile profile) { 
     if (profile != null) { 

      try { 
       fName2.setText(profile.getName()); 
       fAvatar2.setProfileId(profile.getId()); 

      } catch (Exception ex) { 

      } 
     } else { 

     } 

    } 

@Override 
    public void onResume() { 
     super.onResume(); 
     Profile profile = Profile.getCurrentProfile(); 
     OnProfileChanged(profile); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     mCallbackManager2.onActivityResult(requestCode, resultCode, data); 
    } 

是否與私人保護一個問題嗎?信息無法通過對話框訪問?

回答

0

您是否嘗試過使用您的活動打開會話使用Request.newMeRequest?之後很容易捕獲記錄的用戶配置文件。

GraphRequest rq = GraphRequest.newMeRequest(session, new Request.GraphUserCallback() { 
        @Override 
        public void onCompleted(final GraphUser user, Response response) { ... 
... 
rq.executeAndWait(); 

您可以通過user.getName()在onCompleted方法來獲取用戶的姓名和任何地方使用它。

+0

感謝,但我並不需要正常使用此方法。它在由onCreate()調用的佈局中工作,但不在對話框調用的佈局中(但是在同一活動中) – Jey10

0

在任何活動中,你可以從他們的SDK使用下面的Facebook的代碼,一旦你登錄到Facebook的:

Profile.getCurrentProfile().getName() 
+0

謝謝,但我這樣做,它是用我的代碼編寫的。 – Jey10

+0

。如果它不起作用,請考慮將該名稱放入捆綁對象並將其傳遞給對話框。 – Simon