Android: obtener lista de amigos de facebook
Estoy usando el SDK de Facebook para publicar mensajes en las paredes.
Ahora necesito buscar la lista de amigos de Facebook. ¿Puede alguien ayudarme con esto?
- Publicar texto diferente en facebook y twitter utilizando las intenciones de Android
- Keytool genera hash de clave de 32 caracteres en vez de 28
- Facebook connect for android devuelve una pantalla de inicio de sesión en blanco?
- Clase emitida Excepción en Android string.xml
- Android Listview Flotante Primera fila
– Editar –
try { Facebook mFacebook = new Facebook(Constants.FB_APP_ID); AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook); Bundle bundle = new Bundle(); bundle.putString("fields", "birthday"); mFacebook.request("me/friends", bundle); } catch(Exception e){ Log.e(Constants.LOGTAG, " " + CLASSTAG + " Exception = "+e.getMessage()); }
Cuando ejecuto mi activity
, no veo nada, pero en LogCat
hay un mensaje de depuración como:
06-04 17:43:13.863: DEBUG/Facebook-Util(409): GET URL: https://graph.facebook.com/me/friends?format=json&fields=birthday
Y cuando traté de acceder a esta url directamente desde el navegador, estoy recibiendo la siguiente respuesta de error:
{ error: { type: "OAuthException" message: "An active access token must be used to query information about the current user." } }
- Cómo publicar checkin en un lugar personalizado (como foursquare)
- Error de carga de video de Android Facebook con la API de Android 4+
- Facebook android sdk 3.0 SSO
- ¿Cómo implementar facebook como reaccionar pop up animación en android?
- Usar el FriendPickerFragment de facebook para encontrar amigos con la misma aplicación
- "Página no encontrada" cuando un usuario hace clic en una invitación de Facebook desde mi aplicación
- ¿Podemos cambiar la imagen del enlace (que está publicado por la aplicación android) en facebook
- Facebook SDK 3.8: permiso publish_actions no devuelto
Estás a mitad de camino. Has enviado la solicitud, pero no has definido nada para recibir la respuesta con tus resultados. Puede extender la clase BaseRequestListener
e implementar su método onComplete
para hacerlo. Algo como esto:
public class FriendListRequestListener extends BaseRequestListener { public void onComplete(final String response) { _error = null; try { JSONObject json = Util.parseJson(response); final JSONArray friends = json.getJSONArray("data"); FacebookActivity.this.runOnUiThread(new Runnable() { public void run() { // Do stuff here with your friends array, // which is an array of JSONObjects. } }); } catch (JSONException e) { _error = "JSON Error in response"; } catch (FacebookError e) { _error = "Facebook Error: " + e.getMessage(); } if (_error != null) { FacebookActivity.this.runOnUiThread(new Runnable() { public void run() { Toast.makeText(getApplicationContext(), "Error occurred: " + _error, Toast.LENGTH_LONG).show(); } }); } } }
A continuación, en su solicitud puede especificar el oyente de solicitud para utilizar para recibir la respuesta de la solicitud, como esto:
mFacebook.request("me/friends", bundle, new FriendListRequestListener());
Uso de la consulta FQL
String fqlQuery = "SELECT uid, name, pic_square FROM user WHERE uid IN " + "(SELECT uid2 FROM friend WHERE uid1 = me() LIMIT 25)"; Bundle params = new Bundle(); params.putString("q", fqlQuery); Session session = Session.getActiveSession(); Request request = new Request(session,"/fql", params,HttpMethod.GET, new Request.Callback(){ public void onCompleted(Response response) { Log.i(TAG, "Result: " + response.toString()); try{ GraphObject graphObject = response.getGraphObject(); JSONObject jsonObject = graphObject.getInnerJSONObject(); Log.d("data", jsonObject.toString(0)); JSONArray array = jsonObject.getJSONArray("data"); for(int i=0;i<array.length();i++) { JSONObject friend = array.getJSONObject(i); Log.d("uid",friend.getString("uid")); Log.d("name", friend.getString("name")); Log.d("pic_square",friend.getString("pic_square")); } }catch(JSONException e){ e.printStackTrace(); } } }); Request.executeBatchAsync(request);
Yo estaba lidiando con eso y encontré la respuesta. El problema es que desea acceder a sus datos sin registro previo con su token de Facebook.
En primer lugar, debe definir su variable de Facebook:
Facebook mFacebook = new Facebook(getString(R.string.fb_id));
Más adelante, defina su AsyncFacebookRunner:
final AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook);
Ok, ahora debe autorizar su solicitud, con el método autorize. Tenga en cuenta que debe implementar métodos de devolución de llamada en DialogListener (), ponga atención en el método onComplete (). En ese método debe ejecutar la solicitud de búsqueda de amigos. Ahora su solicitud pasará porque ahora está autenticado. Ahora el código:
mFacebook.authorize(this, fb_perms, new DialogListener(){ /** * Triggered on a successful Facebook registration. */ public void onComplete(Bundle values) { mAsyncRunner.request("me/friends", new FriendListRequestListener()); } /** * Triggered on a FacebookError. */ public void onFacebookError(FacebookError e) { } /** * Triggered on a DialogError. */ public void onError(DialogError e) { } /** * Triggered when the User cancels the Facebook Login. */ public void onCancel() { } });
Puede utilizar la clase FriendListRequestListener que se publicó por @Kon
Espero que esto ayude.
¡Aclamaciones!
Hola Por favor verifique debajo del enlace
API de Facebook para Android: ¿cómo obtener más información sobre los amigos del usuario?
Publicar en los amigos del usuario la pared de facebook a través de la aplicación Android
Me enfrenté al mismo problema ayer. Me pregunto si has sobrepasado la función onActivityResult()
?
private Facebook mFacebook=null; ... ... ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { mFacebook.authorizeCallback(requestCode, resultCode, data); }
Comprueba esta respuesta para saber cómo obtener la lista de amigos de Facebook y quién de estos amigos ha instalado tu aplicación usando el nuevo SDK de Facebook 3.0 para Android.
Estoy haciendo algo como esto está funcionando bien ….
jsonObj = Util.parseJson(facebook.request("me/friends")); JSONArray jArray = jsonObj.getJSONArray("data"); for(int i=0;i<jArray.length();i++){ JSONObject json_data = jArray.getJSONObject(i); Log.v("THIS IS DATA", i+" : "+jArray.getJSONObject(i)); }
Espero que sea útil …
Si alguien está leyendo esto a finales de 2015, la respuesta y el código es bastante simple. Eche un vistazo a la documentación oficial aquí (en la ventana de código haga clic en Android SDK). Tenga en cuenta que necesita tener permiso de user_friends.
Extremidad de Bro para los usuarios de android-rx – consiga a sus amigos síncrono, después procese el mensaje y la vuelta Observable:
public Observable<List<Friend>> execute() { return Observable.defer(new Func0<Observable<List<Friend>>>() { @Override public Observable<List<Friend>> call() { AccessToken a = AccessToken.getCurrentAccessToken(); if (Utils.isValid(a)) { try { GraphResponse res = new GraphRequest(AccessToken.getCurrentAccessToken(), "me/friends").executeAndWait(); // process result return Observable.just(your friend list); } catch (Exception e) { // notify user or load again } } // invalid access token -> notify user } }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); }
- Problema con enlace de datos usando Kotlin para Android
- NDK no está configurado problema en android studio