J'utilise le Facebook SDK pour publier des messages sur les murs.
Maintenant, je dois aller chercher la liste d'amis Facebook. Quelqu'un peut-il m'aider avec ça?
-- Modifier --
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());
}
Lorsque j'exécute ma activity
, je ne vois rien, mais dans LogCat
, il y a un message de débogage du type:
06-04 17:43:13.863: DEBUG/Facebook-Util(409): GET URL: https://graph.facebook.com/me/friends?format=json&fields=birthday
Et quand j'ai essayé d'accéder à cette URL directement à partir du navigateur, j'obtiens la réponse d'erreur suivante:
{
error: {
type: "OAuthException"
message: "An active access token must be used to query information about the current user."
}
}
Vous êtes à mi-chemin. Vous avez envoyé la demande, mais vous n'avez rien défini pour recevoir la réponse avec vos résultats. Vous pouvez étendre la classe BaseRequestListener
et implémenter sa méthode onComplete
pour le faire. Quelque chose comme ça:
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();
}
});
}
}
}
Ensuite, dans votre demande, vous pouvez spécifier le programme d'écoute à utiliser pour recevoir la réponse de la demande, comme suit:
mFacebook.request("me/friends", bundle, new FriendListRequestListener());
Utilisation de la requête 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);
J'avais affaire à cela et j'ai trouvé la réponse. Le problème est que vous voulez accéder à vos données sans inscription préalable avec votre token facebook.
Tout d'abord, vous devez définir votre variable Facebook:
Facebook mFacebook = new Facebook(getString(R.string.fb_id));
Ensuite, définissez votre AsyncFacebookRunner:
final AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook);
Ok, maintenant vous devez autoriser votre demande, avec la méthode autorize. Notez que vous devez implémenter des méthodes de rappel sur DialogListener (), faites attention à la méthode onComplete (). Sur cette méthode, vous devez exécuter la demande de récupération d'amis. Maintenant, votre demande sera acceptée car vous êtes maintenant authentifié. Maintenant, le code:
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() {
}
});
Vous pouvez utiliser la classe FriendListRequestListener qui a été postée par @Kon
J'espère que ça aide.
À votre santé!
Salut s'il vous plaît vérifier lien ci-dessous
API Facebook pour Android: comment obtenir des informations étendues sur les amis de l'utilisateur?
Publier sur le mur facebook des amis de l'utilisateur via l'application Android
J'ai rencontré le même problème hier. Je me demande si vous avez annulé la fonction onActivityResult()
?
private Facebook mFacebook=null;
...
...
...
@Override
protected void onActivityResult(int requestCode,
int resultCode,
Intent data) {
mFacebook.authorizeCallback(requestCode, resultCode, data);
}
Vérifiez ceci répondez afin de savoir comment obtenir la liste d'amis Facebook et qui de ces amis a installé votre application à l'aide du nouveau Kit de développement logiciel (SDK) Facebook 3.0 pour Android.
Si quelqu'un lit ceci à la fin de 2015, la réponse et le code sont assez simples. Consultez la documentation officielle ici (dans la fenêtre du code, cliquez sur Android SDK). N'oubliez pas que vous devez avoir l'autorisation de user_friends.
Petit conseil pour les utilisateurs d’Android-rx - récupérez vos amis de manière synchrone, puis traitez le message et renvoyez 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());
}
Je fais quelque chose comme ça marche 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));
}
J'espère que c'est utile ...