1

ユーザーの詳細を取得するために、Androidでフラグメントを使用し、Facebookログインを統合しています。

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.xmlmetadateforを含めました。facebookapplicationId

の場合、どこが間違っているのか教えてくださいFragment

4

2 に答える 2

0

私は解決策を見つけました、上記のコードは実際には正しいです、私はそれが機能していないために何か他の間違ったことをしていました。私はそれを修正し、上記のコードは機能します

于 2013-03-07T12:22:33.837 に答える
0

私の知る限り、facebook SDK はフラグメントをサポートしていません。したがって、onActivityForResult はトリガーされません。これをフラグメントに移動する必要があります 親 親 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() を使用してフラグメントを取得します。session.isOpened() は、parentFragmentActivity の onActivityResult が実行されると自動的にトリガーされます。

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)
                                                      }
                                                    }
                                                  });
                                            }

                                    }
                                });
                    }

                }
            });
    }
});
于 2014-03-07T07:52:50.450 に答える