Android: получите список друзей в facebook
Я использую Facebook SDK для размещения сообщений на стенах.
Теперь мне нужно найти список друзей Facebook. Может ли кто-нибудь помочь мне в этом?
- Изменить -
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());
}
Когда я выполняю мой activity
, я ничего не вижу, но в LogCat
появляется сообщение об отладке вроде:
06-04 17:43:13.863: DEBUG/Facebook-Util(409): GET URL: https://graph.facebook.com/me/friends?format=json&fields=birthday
И когда я попытался получить доступ к этому URL прямо из браузера, я получаю следующий ответ об ошибке:
{
error: {
type: "OAuthException"
message: "An active access token must be used to query information about the current user."
}
}
Ответы
Ответ 1
Ты примерно на полпути. Вы отправили запрос, но вы ничего не определили, чтобы получить ответ с вашими результатами. Вы можете расширить класс BaseRequestListener
и реализовать его метод onComplete
для этого. Что-то вроде этого:
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();
}
});
}
}
}
Затем в вашем запросе вы можете указать прослушиватель запросов, который будет использоваться для получения ответа от запроса, например:
mFacebook.request("me/friends", bundle, new FriendListRequestListener());
Ответ 2
Использование запроса 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);
Ответ 3
Я имел дело с этим, и я нашел ответ.
Проблема в том, что вы хотите получить доступ к своим данным без предварительной регистрации с помощью токена facebook.
Во-первых, вы должны определить свою переменную Facebook:
Facebook mFacebook = new Facebook(getString(R.string.fb_id));
Позже определите свой AsyncFacebookRunner:
final AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook);
Хорошо, теперь вы должны авторизовать свой запрос с помощью метода autorize. Обратите внимание, что вы должны реализовать методы обратного вызова на DialogListener(), обратить внимание на метод onComplete(). В этом методе вы должны запустить запрос на выбор друга. Теперь ваш запрос пройдет, потому что теперь вы авторизованы.
Теперь код:
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() {
}
});
Вы можете использовать класс FriendListRequestListener, который был отправлен @Kon
Надеюсь, это поможет.
Ура!
Ответ 4
Привет, пожалуйста, проверьте ниже ссылку
Facebook API для Android: как получить расширенную информацию о друзьях друзей?
Опубликовать в друзьях Facebook facebook через приложение для Android
Ответ 5
Я столкнулся с той же проблемой вчера.
Мне интересно, если вы переопределили функцию onActivityResult()
?
private Facebook mFacebook=null;
...
...
...
@Override
protected void onActivityResult(int requestCode,
int resultCode,
Intent data) {
mFacebook.authorizeCallback(requestCode, resultCode, data);
}
Ответ 6
Я делаю что-то вроде этого, работает хорошо....
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));
}
Надеюсь, что это полезно...
Ответ 7
Отметьте этот ответ, чтобы узнать, как получить список друзей Facebook, и кто из этих друзей установил ваше приложение, используя новый Facebook SDK 3.0 для Android.
Ответ 8
Если кто-то читает это в конце 2015 года, ответ и код довольно просты. Взгляните на официальную документацию здесь (в окне кода щелкните Android SDK).
Имейте в виду, что вам необходимо иметь разрешение user_friends.
Совет для пользователей android-rx - синхронизировать своих друзей, а затем обрабатывать сообщение и возвращать. Наблюдаемое:
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());
}