Extract username and gender from facebook in android

This is how I retrieve information stored in general preferences and then compare if a username and password exist. If the user is logged in, I can show another action.

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

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

But now I'm trying to get the username and gender of the user and display in my activity.

I am trying to solve this, but have not yet found a convincing result.

Can someone help me get out of my requirement?

Note. I also see documents on the Facebook developers page.


This is the code that I use to retrieve user data and display in another action. What problem is that the layout is loading before the answer from facebook is parsed. I suspect this is due to the use of mAsyncRunner, as it controls the control itself. What I'm trying to figure out is hwo to analyze it before loading the layout.

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

Can anybody help me?

+4
source share
1 answer

Finally, I can solve my problem myself.

 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"); 

This is part of my code, how I extracted data

+7
source

All Articles