Android: consigue la 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?

– 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 intenté acceder a esta URL directamente desde el navegador, aparece la siguiente respuesta de error:

 { error: { type: "OAuthException" message: "An active access token must be used to query information about the current user." } } 

Estás a mitad de camino allí. Enviaste 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 hacer eso. 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(); } }); } } } 

Luego, en su solicitud puede especificar el oyente de solicitud que utilizará para recibir la respuesta de la solicitud, como este:

 mFacebook.request("me/friends", bundle, new FriendListRequestListener()); 

Usando 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 

Estaba lidiando con eso y encontré la respuesta. El problema es que desea acceder a sus datos sin registrarse previamente con su token de Facebook.

Primero, debes definir tu variable de Facebook:

 Facebook mFacebook = new Facebook(getString(R.string.fb_id)); 

Más tarde, defina su AsyncFacebookRunner:

 final AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook); 

Ok, ahora debes autorizar tu solicitud, con el método de autorizar. Tenga en cuenta que debe implementar métodos de callback en DialogListener (), ponga atención en el método onComplete (). En ese método debes 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 usar la clase FriendListRequestListener publicada por @Kon

Espero que esto ayude.

¡Aclamaciones!

Hola, comprueba el enlace a continuación

Facebook API para Android: ¿cómo obtener información extendida sobre los amigos de los usuarios?

Publique en la pared de Facebook de amigos del usuario a través de la aplicación de Android

Me enfrenté al mismo problema ayer. Me pregunto si ha onActivityResult() función onActivityResult()

 private Facebook mFacebook=null; ... ... ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { mFacebook.authorizeCallback(requestCode, resultCode, data); } 

Compruebe esta respuesta para saber cómo obtener la lista de amigos de Facebook y quién de estos amigos ha instalado su aplicación usando el nuevo Facebook SDK 3.0 para Android.

Estoy haciendo algo así, está funcionando bien …

  jsonObj = Util.parseJson(facebook.request("me/friends")); JSONArray jArray = jsonObj.getJSONArray("data"); for(int i=0;i 

Espero que sea útil ...

Si alguien está leyendo esto a finales de 2015, la respuesta y el código son bastante simples. 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.

Sugerencia de Bro para usuarios de Android-rx: obtén amigos de forma sincronizada, luego procesa el mensaje y devuelve Observable:

 public Observable> execute() { return Observable.defer(new Func0>>() { @Override public Observable> 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()); }