1

アプリを Facebook ログインと統合しました。これは私のコードです:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    Session.openActiveSession(this, true, new Session.StatusCallback() {

      public void call(Session session, SessionState state, Exception exception) {
        if (session.isOpened()) {


          Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {


            public void onCompleted(GraphUser user, Response response) {
              if (user != null) {
                TextView t = (TextView) findViewById(R.id.text);
                t.setText("Hello " + user.getName() + "!");
              }
            }
          });
        }
      }
    });
  }

  public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
  }`

デバイスエミュレーターではこのコードは機能しますが、デバイスで試してみると、アプリに次のメッセージが表示されます。したがって、[OK] をクリックすると、textView にユーザーの名前が設定されません。なんで?

4

1 に答える 1

0

読み取りには追加のアクセス許可が必要なので、コードは次のようになります。

    OpenRequest req = new OpenRequest(getActivity()).setCallback(new Session.StatusCallback() {
        @Override
        public void call(Session session, SessionState state, Exception exception) {                
            if (session.isOpened()) {
                Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (user != null) {
                            //do login stuff
                        } else {
                            //show error message

                        }
                    }
                });
            } else {
                if (exception != null) {
                    //show error
                }
            }
        }
    }); 
    req.setPermissions(Arrays.asList("email", "user_location"));
    Session session = new Builder(getActivity()).build();
    Session.setActiveSession(session);
    session.openForRead(req);

getActivity()これは Fragment 内にあるため、 に置き換えることができますthis。正しい onActivityResult() メソッドを使用すると、FB に問題はありません。

于 2013-02-25T16:34:47.260 に答える