0

我已经在我的项目中实现了使用 facebook 登录。代码如下:

public class login extends Activity{
ImageView fbtn;
private SharedPreferences mPrefs;
static Facebook facebook = new Facebook("271089732997803");
String access_token;
long expires;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yf_login1);
    mPrefs = getPreferences(MODE_PRIVATE);
    access_token = mPrefs.getString("access_token", null);
    expires = mPrefs.getLong("access_expires", 0);
    fbtn = (ImageView)findViewById(R.id.fbtn);
    fbtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            if(access_token != null) {
                facebook.setAccessToken(access_token);
                Log.v("access_token", access_token);
            }
            if(expires != 0) {
                facebook.setAccessExpires(expires);
                Log.i("expires", ""+expires);
            }
            if (!facebook.isSessionValid()) {

                facebook.authorize(login.this,new String[] {}, new DialogListener() {
                    @Override
                    public void onComplete(Bundle values) {
                        SharedPreferences.Editor editor = mPrefs.edit();
                        editor.putString("access_token", facebook.getAccessToken());
                        editor.putLong("access_expires", facebook.getAccessExpires());
                        editor.commit();

                    }


                    @Override
                    public void onFacebookError(FacebookError error) {

                    }

                    @Override
                    public void onError(DialogError e) {

                    }

                    @Override
                    public void onCancel() {

                    }
            });
            }
            else{
                 startActivity(new Intent(login.this,ChooseTeam.class));
            }

        }
    });
}

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

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

@Override
public void onResume() {    
    super.onResume();
    facebook.extendAccessTokenIfNeeded(this, null);
}

现在我的问题是,当我单击 fb 按钮时,它将加载进度条,并在 30-40 秒后返回相同的页面。

最重要的是,当我在另一台电脑上运行相同的项目时,它会完美运行,打开 facebook 的登录对话框并在我的偏好中获得值。但就我而言,我什至无法获得数据中的偏好。

我的模拟器会出现什么问题?我正在使用eclipse galilio和sdk20。

4

2 回答 2

2

我得到了解决方案,实际上我的防病毒软件被模拟器阻止了互联网。所以我已经卸载了防病毒软件并运行了该应用程序并且它可以工作。

谢谢大家帮助我。

于 2012-08-15T09:25:09.547 回答
0

试试这个.. 并使用此权限在 Facebook 中共享..

私有字符串[] mPermissions={"publish_stream"};

mFb.authorize(SettingActivity.this, mPermissions,new com.fbintegration.Facebook.DialogListener()
                        {

                            public void onFacebookError(FacebookError e)
                            {

                            }

                                public void onError(DialogError e) 
                                {

                                }

                                public void onComplete(Bundle values) 
                                {


                                    SessionStore.save(mFb, getApplicationContext());



                                }

                            public void onCancel() 
                            {
                                // TODO Auto-generated method stub

                            }
                        });

这是 Facebook 连接器类....

public class FacebookConnector
{

    private Facebook facebook = null;
    private Context context;
    private String[] permissions;
    private Handler mHandler;
    private Activity activity;
    //private SessionListener mSessionListener = new SessionListener();;

    public FacebookConnector(String appId,Activity activity,Context context,String[] permissions) 
    {
        this.facebook = new Facebook(appId);

        SessionStore.restore(facebook, context);


        this.context=context;
        this.permissions=permissions;
        this.mHandler = new Handler();
        this.activity=activity;
    }

    public void login() 
    {
        if (!facebook.isSessionValid()) 
        {
            facebook.authorize(this.activity, this.permissions,new LoginDialogListener());
        }
    }

    /*public void logout() 
    {
        SessionEvents.onLogoutBegin();
        AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(this.facebook);
        asyncRunner.logout(this.context, new LogoutRequestListener());
    }*/

    public void postMessageOnWall(String msg)
    {
        if (facebook.isSessionValid())
        {
            Bundle parameters = new Bundle();
            parameters.putString("message", msg);
            try
            {
                //JSONObject response=Util.parseJson(facebook.request("me/feed", parameters,"POST"));
                String response = facebook.request("me/feed", parameters,"POST");
                System.out.println(response);
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }
        else
        {

        }
    }   

    private final class LoginDialogListener implements DialogListener
    {
        public void onComplete(Bundle values) 
        {
            SessionEvents.onLoginSuccess();
        }

        public void onFacebookError(FacebookError error)
        {
            SessionEvents.onLoginError(error.getMessage());
        }

        public void onError(DialogError error)
        {
            SessionEvents.onLoginError(error.getMessage());
        }

        public void onCancel() 
        {
            SessionEvents.onLoginError("Action Canceled");
        }
    }


    private class SessionListener implements AuthListener, LogoutListener
    {

        public void onAuthSucceed()
        {
            SessionStore.save(facebook, context);
        }

        public void onAuthFail(String error) {
        }

        public void onLogoutBegin() {           
        }

        public void onLogoutFinish() {
            SessionStore.clear(context);
        }
    }

    public Facebook getFacebook() 
    {
        return this.facebook;
    }
}
于 2012-08-15T06:04:07.730 回答