android - 在 android 中从 Facebook 检索用户名和性别

标签 android facebook

这就是我如何检索存储在共享首选项中的信息,然后比较用户名和密码是否存在。如果用户已登录,我可以显示另一个 Activity 。

SharedPreferences settings = getSharedPreferences("logindetails", 0);

    String username = settings.getString("username", "");


    String password = settings.getString("password", "");

但现在我正在尝试检索用户的用户名和性别并显示在我的 Activity 中。

我正在尝试解决这个问题,但还没有找到令人信服的结果。

任何人都可以帮助我摆脱我的要求吗?

注意:我也看到了Facebook开发者页面的文档


这是我用来检索用户数据并在另一个 Activity 中显示的代码。我面临的问题是布局是在 facebook 的响应被删除之前加载的。我怀疑这是因为使用了 mAsyncRunner,因为它自行控制。我想知道的是如何在加载布局之前解析它。

public class FaceBookRetrieval extends Activity{


this.facebookConnector = new FacebookConnect(APP_ID, this,
                getApplicationContext(), PERMS);

}

public class FacebookConnect {

    public FacebookConnect fb = null;
    private Facebook facebook = null;
    private Context context;
    private String[] permissions;
    public static final String TAG = "FACEBOOK";
    private AsyncFacebookRunner mAsyncRunner;
    private SharedPreferences sharedPrefs;
    private ProgressBar pb;
    public  String fbName, fbGender;
    private Activity activity;
    public String check = "false";
    private SessionListener mSessionListener = new SessionListener();;

    public FacebookConnect(String appId, Activity activity, Context context,
            String[] permissions) {
        this.facebook = new Facebook(appId);
        mAsyncRunner = new AsyncFacebookRunner(facebook);
        SessionStore.restore(facebook, context);
        SessionEvents.addAuthListener(mSessionListener);
        SessionEvents.addLogoutListener(mSessionListener);

        this.context = context;
        this.permissions = permissions;
        this.activity = activity;
    }

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

    public void getID() {

            login();


        return;
    }

    public boolean isSession() {
        sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
        String access_token = sharedPrefs.getString("access_token", "x");
        Long expires = sharedPrefs.getLong("access_expires", -1);
        Log.d(TAG, access_token);
        facebook.setAccessToken(null);
        facebook.setAccessExpires(-1);

        if (access_token != null && expires != -1) {
//          facebook.setAccessToken(access_token);
//          facebook.setAccessExpires(expires);



        }

        return facebook.isSessionValid();
    }



    // request the facebook to provide the response and then parse the response to 
    // obtain username and gender
    private class IDRequestListener implements RequestListener {

        @Override
        public void onComplete(String response, Object state) {
            try {

                Log.d(TAG, "Response: " + response.toString());
                JSONObject json = Util.parseJson(response);
                fbGender = json.getString("gender");
                fbName = json.getString("name");
                check = "true";

            } catch (JSONException e) {
                Log.d(TAG, "JSONException: " + e.getMessage());
            } catch (FacebookError e) {
                Log.d(TAG, "FacebookError: " + e.getMessage());
            }
            Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show();
            FacebookConnect.this.runOnUiThread(new Runnable() {
                public void run() {
                    pb.setVisibility(ProgressBar.VISIBLE);
                }
            });
            return ;
        }

        @Override
        public void onIOException(IOException e, Object state) {
            Log.d(TAG, "IOException: " + e.getMessage());
        }

        @Override
        public void onFacebookError(FacebookError e, Object state) {
            Log.d(TAG, "FacebookError: " + e.getMessage());
        }

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

        }

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

        }

    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        facebook.authorizeCallback(requestCode, resultCode, data);
    }

    public void runOnUiThread(Runnable runnable) {
    }



    private class LoginDialogListener implements DialogListener {

        @Override
        public void onComplete(Bundle values) {

            String token = facebook.getAccessToken();
            long token_expires = facebook.getAccessExpires();
            Log.d(TAG, "AccessToken: " + token);
            Log.d(TAG, "AccessExpires: " + token_expires);
            sharedPrefs = PreferenceManager
                    .getDefaultSharedPreferences(context);
            sharedPrefs.edit().putLong("access_expires", token_expires).clear()
                    .commit();
            sharedPrefs.edit().putString("access_token", token).clear().commit();
            mAsyncRunner.request("me", new IDRequestListener());
            Toast.makeText(context, "You are logged in", Toast.LENGTH_SHORT).show();

            return;
        }

        @Override
        public void onCancel() {
            Log.d(TAG, "OnCancel");
        }

        @Override
        public void onFacebookError(FacebookError e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onError(DialogError e) {
            // TODO Auto-generated method stub

        }
    }

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


}

谁能帮帮我?

最佳答案

终于可以自己解决问题了。

private static final String[] PERMS = new String[] { "publish_stream" };
----->


this.facebookConnector = new FacebookConnect(APP_ID, this, getApplicationContext(), PERMS);

---->

JSONObject json = Util.parseJson(response);


fbGender = json.getString("gender");


fbName = json.getString("name");

这是我提取数据的一段代码

关于android - 在 android 中从 Facebook 检索用户名和性别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7291167/

相关文章:

java - 开始制作Android应用程序

ios - 使用 Swift 登录 Facebook 后不会触发 Segue

Facebook:发送应用邀请

作为额外传递的 Android 应用程序 : Runtime error when I try to get the Parcelable,

android - 服务未初始化,返回 NullPointerException

android - 发布 Build 时出现 NoSuchMethodException

android facebook授权(SDK 3.0) FB提示登录两次

php - 重定向到 Facebook 页面

android - 在 android 中查询 sqlite(插入查询)

android - 如何从嵌套的json数组android中获取数据