Recuperando nombre de usuario y género de Facebook en Android
Así es como recupero la información almacenada en preferencia compartida y luego comparo si existe nombre de usuario y contraseña. Si el usuario ha iniciado sesión, puedo mostrar otra actividad.
SharedPreferences settings = getSharedPreferences ("logindetails", 0);
String username = settings.getString("username", "");
String password = settings.getString("password", "");
Pero ahora estoy tratando de recuperar el nombre de usuario y el género del usuario y mostrarlos en mi actividad.
stoy tratando de resolver esto, pero aún no he encontrado el resultado convincente.
¿Alguien puede ayudarme a salir de mi requerimiento?
Nota: También estoy viendo los documentos de la página del desarrollador de Facebook
Este es el código que estoy usando para recuperar los datos del usuario y mostrarlos en otra actividad. El problema al que me enfrento es que el diseño se carga antes de que se acorte la respuesta de Facebook. Sospecho que se debe al uso de mAsyncRunner, ya que toma el control por sí solo. Lo que estoy tratando de descubrir es dos para analizar antes de cargar el diseño.
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;
}
}
¿Alguien puede ayudarme?