2013-01-03 62 views
1

我在Android中使用Fragments並將Facebook與其集成,以便獲取用戶詳細信息。Facebook Api 3.0與片段集成

public void postOnfacebook() { 
     Session.openActiveSession(getActivity(), this, true, 
       new StatusCallback() { 

        @Override 
        public void call(Session session, SessionState state, 
          Exception exception) { 
         if (session.isOpened()) { 
          Request.executeMeRequestAsync(session, 
            new GraphUserCallback() { 

             @Override 
             public void onCompleted(GraphUser user, 
               Response response) { 
              if (user != null) { 
               id = user.getId(); 
               name = user.getName(); 

               gender = user 
                 .getProperty("gender") == null ? "male" 
                 : user.getProperty(
                   "gender") 
                   .toString(); 


              } 

            } 
           }); 
        } 

       } 
      }); 
} 

我也有下面的方法包括在我的fragment按照文檔

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Session.getActiveSession().onActivityResult(getActivity(), requestCode, 
       resultCode, data); 
} 

我已經試過Activity相同的代碼,它在那裏工作,但它不列入了Fragment內工作。 根據文檔,我已將LoginActivity包含在AndroidManifest.xmlmetadate中,對於facebookapplicationId

如果是Fragment,您能否建議我要去哪裏?

+0

請問您可以在這裏指導我。 什麼是概率。 我在活動而不是調用者片段獲取onActivityResult回調。 –

+0

Yashpal,如果你找到了解決方案,你應該分享它,這樣其他人可以從中受益。是不是所有的重點? – Veeru

回答

0

我想出瞭解決方案,上面的代碼實際上是正確的,我做了其他錯誤,因爲它不工作。我糾正了以上代碼作品

+0

請提供您的解決方案,如果你得到它的工作。 – Veeru

+0

上面的代碼是Veeru的解決方案,您必須先閱讀我的答案,然後發表評論 –

+0

我的歉意 - 我沒有看到您修改/更新的代碼中的哪一部分使其工作。 – Veeru

0

據我瞭解,Facebook的SDK不支持片段。 所以onActivityForResult不會被觸發,這必須被移入片段Parent Parent FragmentActivity應該具有以下代碼;這會更新片段中的會話,並且您可以在片段中處理會話。

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     System.out.println("OnActivityResult fragment Parent"); 
     super.onActivityResult(requestCode, resultCode, data); 
     Session.getActiveSession().onActivityResult(this, requestCode, 
       resultCode, data); 
    } 

在片段中添加類似如下的內容。使用getActivity()獲取片段。當parentFragmentActivity的onActivityResult被執行時,session.isOpened()會自動觸發。

btnFacebook.setOnClickListener(new View.OnClickListener() {   
    @Override 
    public void onClick(View v) { 
     Session.openActiveSession(getActivity(), true, new Session.StatusCallback() { 
        @Override 
        public void call(final Session session, SessionState state, 
          Exception exception) { 
         System.out.println("Session :"+session.getState()); 
         if (session.isOpened()) { 
          Request.executeMeRequestAsync(session, 
            new GraphUserCallback() { 

             @Override 
             public void onCompleted(GraphUser user, 
               Response response) { 
              if (user != null) { 
               System.out.println("User ID "+user.getId()); 
               System.out.println("User Name "+user.getFirstName()+" "+user.getLastName());; 
               Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

                // callback after Graph API response with user object 
                @Override 
                public void onCompleted(GraphUser user, Response response) { 
                 if (user != null) { 
                  System.out.println(user.getName()); 
                  System.out.println("facebook user id" + user.getId()); 
                 System.out.println(user.asMap().get("email").toString()); 
                 // Session.OpenRequest open = new Session.OpenRequest(Login) 
                 } 
                } 
                }); 
              } 

            } 
           }); 
        } 

       } 
      }); 
    } 
});