0

このチュートリアルhttp://www.androidhive.info/2012/03/android-facebook-connect-tutorial/に従って、 FacebookをAndroidアプリケーションに接続しました。多くのボタンを使用する代わりに、ログインとログアウトの両方に使用されるボタンがあります。

1)初めてクラスを実行したときは、ログインしてから正常にログアウトできました。また、同じボタンをクリックして再度ログインすると、ログインページは表示されませんが、トーストテキスト「LOGGINGIN」が表示されます。これは、 if-elseのloginToFacebook()機能の後にあります。したがって、クラスを初めて実行するときと同じように、Facebookのログインページを実行する必要があったと思います。ただし、ログインページは表示されません。

私は何を間違えましたか?そして、私は何をすべきですか?

String fbLoggedIn2)ログイン後、「CONNECTED!!」というテキストの代わりにユーザー名を表示するにはどうすればよいですか。?

public class FacebookActivity extends Activity{

private static String APP_ID = "";
private Facebook facebook;
private AsyncFacebookRunner mAsyncRunner;
String FILENAME = "AndroidSSO_data";
private SharedPreferences mPrefs;
private Button backButton;
private String name = "CONNECTED!!";

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_share);

    facebook = new Facebook(APP_ID);
    mAsyncRunner = new AsyncFacebookRunner(facebook);

    RelativeLayout fbButton = (RelativeLayout) findViewById(R.id.fbLayout);
    fbButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (!facebook.isSessionValid())
            {
            System.out.println("Not Connected. Clicked and Login.");    
            loginToFacebook();
            Toast.makeText(getApplicationContext(), "LOGGING IN", Toast.LENGTH_LONG).show();}

            else
            {
            System.out.println("Connected. Logged Out.");   
            logoutFromFacebook();
            Toast.makeText(getApplicationContext(), "LOGGED OUT", Toast.LENGTH_LONG).show();}
        }
    });     
}

public void loginToFacebook() {
    mPrefs = getPreferences(MODE_PRIVATE);
    String access_token = mPrefs.getString("access_token", null);
    long expires = mPrefs.getLong("access_expires", 0);

    if (access_token != null) {
        facebook.setAccessToken(access_token);
    }

    if (expires != 0) {
        facebook.setAccessExpires(expires);
    }

    if (!facebook.isSessionValid()) {   

        facebook.authorize(this, new String[] { "email", "publish_stream" }, new DialogListener() {

                    @Override
                    public void onCancel() {
                        // Function to handle cancel event
                    }

                    @Override
                    public void onComplete(Bundle values) {
                        // Function to handle complete event
                        // Edit Preferences and update facebook acess_token
                        SharedPreferences.Editor editor = mPrefs.edit();
                        editor.putString("access_token", facebook.getAccessToken());
                        editor.putLong("access_expires", facebook.getAccessExpires());
                        editor.commit();   

                        TextView fbUser = (TextView) findViewById(R.id.fbUser);
                        fbUser.setVisibility(View.VISIBLE);
                        String fbLoggedIn = name;
                        fbUser.setText(fbLoggedIn); 
                        Toast.makeText(getApplicationContext(), "LOGGED IN AS " + name, Toast.LENGTH_LONG).show();         
                    }

                    @Override
                    public void onError(DialogError error) {
                        // Function to handle error
                    }

                    @Override
                    public void onFacebookError(FacebookError fberror) {
                        // Function to handle Facebook errors
                    }

                });
    }
}

public void getProfileInformation() {
    mAsyncRunner.request("me", new RequestListener() {
        @Override
        public void onComplete(String response, Object state) {
            Log.d("Profile", response);
            String json = response;
            try {
                JSONObject profile = new JSONObject(json);
                // getting name of the user
                final String name = profile.getString("name");
                // getting email of the user
                final String email = profile.getString("email");

                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(), "Name: " + name + "\nEmail: " + email, Toast.LENGTH_LONG).show();
                    }

                });

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onIOException(IOException e, Object state) { }

        @Override
        public void onFileNotFoundException(FileNotFoundException e, Object state) { }

        @Override
        public void onMalformedURLException(MalformedURLException e, Object state) { }

        @Override
        public void onFacebookError(FacebookError e, Object state) { }
    });
}

//logout from Facebook
public void logoutFromFacebook() {
    mAsyncRunner.logout(this, new RequestListener() {
        @Override
        public void onComplete(String response, Object state) {
            Log.d("Logout from Facebook", response);
            if (Boolean.parseBoolean(response) == true) {
                // User successfully Logged out
         }

        }

        @Override
        public void onIOException(IOException e, Object state) { }

        @Override
        public void onFileNotFoundException(FileNotFoundException e, Object state) { }

        @Override
        public void onMalformedURLException(MalformedURLException e, Object state) { }

        @Override
        public void onFacebookError(FacebookError e, Object state) { }
    });
 }

明確にするために、私はif-elseをこのように設定しました(上記の完全なコードから抽出)。

    RelativeLayout fbButton = (RelativeLayout) findViewById(R.id.fbLayout);
    fbButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (!facebook.isSessionValid())
            {
            System.out.println("Not Connected. Clicked and Login.");    
            loginToFacebook();
            Toast.makeText(getApplicationContext(), "LOGGING IN", Toast.LENGTH_LONG).show();}

            else
            {
            System.out.println("Connected. Logged Out.");   
            logoutFromFacebook();
            Toast.makeText(getApplicationContext(), "LOGGED OUT", Toast.LENGTH_LONG).show();}
        }
    }); 
4

1 に答える 1

0

これは、FacebookがAPIで実行することを望んでいる動作です。ログインメソッドは、既に一度サインインしているかどうか、およびFacebookセッションがアクティブであるかどうかを確認します。セッションがアクティブな場合、Facebookオブジェクトのプロパティを設定し、ログインページが再度表示されないように、セッションを文の背後に接続します。

だからあなたは何も悪いことをしていません、それはこのように起こると思われます。

于 2012-11-21T16:08:49.620 に答える