0

私は自分のAndroidアプリでFacebookConnectを使用しています。基本的にはフォームです。ページにはFacebookのログインボタンがあります。ユーザーがFacebookログインを使用してログインするときに、フォームの情報を入力する必要があります。

私は次のコードを試しています:

public void loginFB()  {
    facebook.authorize(this, new String[] { "email", "read_stream" }, new DialogListener() {                
        @Override
        public void onComplete(Bundle values) {}

        @Override
        public void onFacebookError(FacebookError error) {}

        @Override
        public void onError(DialogError e) {}

        @Override
        public void onCancel() {}
    });

    getlogininfo();
}                 

public void getlogininfo(){
    mAsyncRunner.request("me", new RequestListener(){
        @Override
        public void onComplete(String response, Object state) {
            try{
                Log.d("Profile", response.toString());
                JSONObject json = Util.parseJson(response);
                final String fname1 = json.getString("first_name");
                final String lname1 = json.getString("last_name");
                    final String email = json.getString("email");
                    MintPaymentsActivity.this.runOnUiThread(new Runnable(){
                        public void run() {
                            fname.setText(fname1);
                            lname.setText(lname1);
                            emailadd.setText(email);
                        }
                    });
                }
                catch(JSONException e){
                    Log.w("This", "eror");
                }
            }

            @Override
            public void onIOException(IOException e, Object state) {
                // TODO Auto-generated method stub
            }
            @Override
            public void onFileNotFoundException(FileNotFoundException e, Object state) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onMalformedURLException(MalformedURLException e, Object state) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onFacebookError(FacebookError e, Object state) {
                // TODO Auto-generated method stub
            }
        });
}

/*FB --- */
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    facebook.authorizeCallback(requestCode, resultCode, data);
}

基本的に、ユーザーがボタンをクリックすると、faceboookはログインを要求し、JSONデータを収集して、ログインしたユーザーの名前と電子メールを表示します。

次のエラーが発生します。

05-30 21:52:40.598: E/AndroidRuntime(665): FATAL EXCEPTION: Thread-13
05-30 21:52:40.598: E/AndroidRuntime(665): com.facebook.android.FacebookError: An active access token must be used to query information about the current user.
05-30 21:52:40.598: E/AndroidRuntime(665):  at com.facebook.android.Util.parseJson(Util.java:279)
05-30 21:52:40.598: E/AndroidRuntime(665):  at com.Myapp.Myapp$2.onComplete(Myapp.java:117)
05-30 21:52:40.598: E/AndroidRuntime(665):  at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:254)

詳細を入力するために追加のボタンを配置すると、getlogininfo()(ログイン後の)ボタンクリックで実装されるため、正常に機能します。しかし、ユーザーがFacebookのログインボタンをクリックするとすぐに入力されるようにしたいと思います。

4

1 に答える 1

2

そのはず:

public void loginFB() {
    facebook.authorize(this, new String[] { "email", "read_stream" }, new DialogListener() {                
        @Override
        public void onComplete(Bundle values) {
            this.getlogininfo();
        }

        @Override
        public void onFacebookError(FacebookError error) {}

        @Override
        public void onError(DialogError e) {}

        @Override
        public void onCancel() {}
    });
}

認証が完了したgetLogininfoにのみ実行したい。 また、エラーも処理することをお勧めします。少なくとも、開発時にわかるようにログに記録してください。

于 2012-05-30T23:38:50.197 に答える