Получить список друзей facebook 3.0

Я пытаюсь получить список моих друзей из Facebook, используя новый SDK (3.0). Я'Я сталкиваюсь с проблемами, связанными с тем, какие параметры мне нужно вставить в Bundle и как использовать newMyFriendRequest и GraphAPI.

Я не'в документации на фейсбуке нет места о том, какое поле мы должны использовать. На основеGraphExplorer Я вставляю в свой Bundle ключ "поля» с этой строкойИдентификатор, имя, друг» как ценность. Код ниже показывает, что яЯ делаю прямо сейчас. После того как я получу свою фотографию и имя, я выполню newMyFriendRequest. Я считаю, что он использует GraphAPI по умолчанию.

Я видел здесь на StackOverflow некоторые сообщения, связанные:

Как отправить запрос FQL с новым Android SDK

Параметры запроса Android SDK Facebook: где найти документацию?

Это мало помогает мне, и я неЯ не хочу использовать FQL. Для ответа II 'Я получаю этот JSON как ответ:

{Response:  responseCode: 500, graphObject: null, error: {HttpStatus: 500, errorCode: 100, errorType: FacebookApiException, errorMessage: Unsupported operation}, isFromCache:false}

Обратите внимание, яЯ очень новый в Facebook SDK для Android.

private void onSessionStateChange(final Session session, SessionState sessionState, Exception ex){
    if(session != null && session.isOpened()){
        getUserData(session);
    }
}

private void getUserData(final Session session){
    Request request = Request.newMeRequest(session, 
        new Request.GraphUserCallback() {
        @Override
        public void onCompleted(GraphUser user, Response response) {
            if(user != null && session == Session.getActiveSession()){
                pictureView.setProfileId(user.getId());
                userName.setText(user.getName());
                getFriends();

            }
            if(response.getError() !=null){

            }
        }
    });
    request.executeAsync();
}

private void getFriends(){
    Session activeSession = Session.getActiveSession();
    if(activeSession.getState().isOpened()){
        Request friendRequest = Request.newMyFriendsRequest(activeSession, 
            new GraphUserListCallback(){
                @Override
                public void onCompleted(List users,
                        Response response) {
                    Log.i("INFO", response.toString());

                }
        });
        Bundle params = new Bundle();
        params.putString("fields", "id,name,friends");
        friendRequest.setParameters(params);
        friendRequest.executeAsync();
    }
}
 Ming Li19 дек. 2012 г., 20:27
тогда что вы хотитеИдентификатор, имя, фотография» для "поля» параметр. Вы также можете перейти кdevelopers.facebook.com/tools/explorer очень быстро опрашивать запросы (в этом случае я использовал / me / friends? fields = id, name, picture).
 learner20 дек. 2012 г., 14:39
@MingLi Хорошо, работает очень хорошо.
 learner19 дек. 2012 г., 18:45
@MingLi Хорошо работает с вашими наблюдениями. Я хочу получить список друзей и изображение профиля для каждого из них. Для этого я считаю, что мне нужно передать параметр в пакет. Если это правда, какой параметр мне нужно передать? Видите, фейсбук, как я уже сказал, плохо с этим типом документации.
 RRTW09 мая 2013 г., 04:55
Кажется, вы решили свою проблему, могу я спросить, как вы изменили свой код, чтобы он заработал?
 Ming Li19 дек. 2012 г., 17:56
Вы пытались не устанавливать какие-либо параметры? Идентификатор и имя там по умолчанию, так что вы нене нужно их просить. Я недумаюдрузья» является допустимым полем. Попробуйте полностью удалить Bundle и setParameters, и просто вызовите friendRequest.executeAsync ().

Ответы на вопрос(7)

Вы можете использовать мой код, вам нужно использовать библиотеку facebook в вашем проекте. Все классы, используемые для Facebook, есть в этом SDK.

private void onSessionStateChange(Session session, SessionState state,
        Exception exception) {
    if (state.isOpened()) {
        Log.i(TAG, "Logged in...");
        Request.executeMyFriendsRequestAsync(session,
                new GraphUserListCallback() {

                    @Override
                    public void onCompleted(List users,
                            Response response) {
                        Log.i("Response JSON", response.toString());
                        names = new String[users.size()];
                        id = new String[users.size()];
                        for (int i=0; i
 Filip Luchianenco10 окт. 2013 г., 00:07
чувак, ты потрясающий. Большое спасибо!
 Anas Azeem10 окт. 2013 г., 08:23
@FilipLuch рад, что вы решили свою вещь
 Oscar S.11 мар. 2015 г., 20:26
Не работает. Это устарело, и теперь оно возвращает только тех друзей, которые используют приложение, откуда вы вызываете API.

чтобы человек спросил, как получить имя и фамилию, вам нужно указать имя и фамилию вместо имени.

params.putString("fields", "id, first_name, last_name, picture");

Использование FQL-запроса

name,pic_square FROM user WHERE uid IN " +
        "(SELECT uid2 FROM friend WHERE uid1 = me())";

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);="" <="" code=""></array.length();i++){>

<strong>Ref:</strong><a href="http://developers.facebook.com/docs/howtos/androidsdk/3.0/run-fql-queries/">Запустить FQL-запросы</a>

 JayR22 июл. 2014 г., 13:09
Привет! Я просто хочу спросить, почему этот код возвращает только друзей из Facebook, которые также дают разрешение на приложение? Почему это не таквместо этого вернуть всех друзей из фейсбука? Спасибо
 Andre Figueiredo11 мая 2015 г., 04:39
@JayR это новый Facebookполитика

params.putString("fields", "id,name,friends");

от

params.putString("fields", "id, name, picture");
 Ankit Sharma21 февр. 2015 г., 08:13
@ignacio_gs, как я могу получить электронную почту моего друга?
 marsbear21 февр. 2014 г., 16:51
Да, добавьте поля: first_name и last_name в запрос
 Sagar09 февр. 2018 г., 13:47
попробуйте использовать это может решитьparams.putString("fields", "id, first_name, last_name, picture");
 user176726021 февр. 2013 г., 12:13
Есть ли способ получить имя и фамилию друзей

Это должно работать:

// @Deprecated
// Request.executeMyFriendsRequestAsync()

// Use this instead:
Request.newMyFriendsRequest(session, new GraphUserListCallback() {

    @Override
    public void onCompleted(List<graphuser> users, Response response) 
    {
        if(response.getError() == null)
        {
            for (int i = 0; i < users.size(); i++) {
                Log.e("users", "users " + users.get(i).getName());
            }
        }
        else
        {
            Toast.makeText(MainActivity.this, 
                           response.getError().getErrorMessage(), 
                           Toast.LENGTH_SHORT).show();
        }
    }
});
</graphuser>
 Gorgeous_DroidVirus15 авг. 2014 г., 09:29
@Mohit Verma Я работаю на Facebook с новым Facebook SDK, но я не могу получить список моих друзей. есть идеи по этому поводу?
 karl11 мар. 2014 г., 22:45
@prateek Как и выше -GraphUserListCallback такой же, как в Мохит Вермаответ. ПолучаетonCompleted вызов, когда запрос завершается, либо с успехом, либо с ошибкой.
 Oscar S.11 мар. 2015 г., 20:25
Этот метод устарел, и он возвращает только тех друзей, которые используют приложение, откуда вы вызываете API.
 Prateek11 мар. 2014 г., 13:25
@karl Как получить результатexecuteAsync() or executeAndWait() Я имею в виду, какой метод обратного вызова вызывается в результате?
 karl05 мар. 2014 г., 00:11
@proGamer замена должна использоватьRequest.newMyFriendsRequest(Session, GraphUserListCallback), который возвращаетRequest на который вы можете позвонитьexecuteAsync() или жеexecuteAndWait()
 noob20 нояб. 2013 г., 14:21
Этот метод устарел, хотя он работает.

/ me / friends возвращает пользователя 'Друзья, которые также используют ваше приложение.

В версии 2.0 конечная точка API друзей возвращает список людей.Друзья, которые также используют ваше приложение. В версии 1.0 ответ включал в себяс друзьями.

В версии 1.0 можно было запрашивать разрешения, которые позволили бы приложению видеть ограниченный объем данных о друзьях, например о человеке.с другомДрузья, их дни рождения и так далее.

В версии 2.0 все эти разрешения были удалены. Это'Приложение больше не может видеть данные человекаДрузья, если только эти друзья не вошли в приложение и не предоставили ему разрешение на просмотр этих данных.

https://developers.facebook.com/docs/apps/upgrading#v2_0_friendlist_title

Используйте следующий код, чтобы получить список друзей из Facebook. Он будет показывать только данные тех пользователей, которые выполнили вход на Facebook с помощью приложения, а пользователи имеют идентификатор Facebook 'с в базе данных. тогда это покажет список тех друзей.

FacebookFriendListActivity.java

package com.application.Activity;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.HttpMethod;
import com.facebook.Request;
import com.facebook.RequestBatch;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionDefaultAudience;
import com.facebook.SessionLoginBehavior;
import com.facebook.SessionState;
import com.facebook.internal.SessionTracker;
import com.facebook.internal.Utility;
import com.facebook.model.GraphObject;
import com.facebook.model.GraphUser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import Info.InfoUsers;
import india.application.upflair.Adapter.FindPeopleAdapter;
import india.application.upflair.R;
import utills.ConnectionDetector;
import utills.Constant;

public class FacebookFriendListActivity extends AppCompatActivity {



    //facebook section
    SessionTracker mSessionTracker;
    Session mCurrentSession = null;

    String facebook_id;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview);


        signInWithFacebook();


    }

    /***
     * facebook section to get friend list
     */
    private void signInWithFacebook() {
        mSessionTracker = new SessionTracker(getBaseContext(), new Session.StatusCallback() {
            @Override
            public void call(Session session, SessionState state, Exception exception) {
                //TODO..
            }
        },
                null, false);

        String applicationId = Utility.getMetadataApplicationId(getBaseContext());
        mCurrentSession = mSessionTracker.getSession();
        mSessionTracker.setSession(null);
        Session session = new Session.Builder(getBaseContext()).setApplicationId(applicationId).build();
        Session.setActiveSession(session);
        mCurrentSession = session;

        if (!mCurrentSession.isOpened()) {
            Session.OpenRequest openRequest = null;
            openRequest = new Session.OpenRequest(FacebookFriendListActivity.this);
            if (openRequest != null) {
                openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
                openRequest.setPermissions(Arrays.asList("user_birthday", "email", "user_location", "user_friends"));
                openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
                mCurrentSession.openForRead(openRequest);
                accessFacebookUserInfo();


            }
        } else {
            accessFacebookUserInfo();
        }
    }

    Request friendListRequest = null;
    private void accessFacebookUserInfo() {
        if (Session.getActiveSession() != null & Session.getActiveSession().isOpened()) {



            Request cover_request = new Request(Session.getActiveSession(), "me", null, HttpMethod.GET, new Request.Callback() {
                @Override
                public void onCompleted(Response response) {}
            });
            Request.executeBatchAsync(cover_request);

            Request meRequest = Request.newMeRequest(Session.getActiveSession(),new Request.GraphUserCallback() {
                @Override
                public void onCompleted(GraphUser user, Response response) {
                    try {

                        friendListRequest.executeAsync();

                    } catch (Exception jex) {
                        jex.printStackTrace();
                    }
                }
            });

            RequestBatch requestBatch = new RequestBatch(meRequest);

            requestBatch.addCallback(new RequestBatch.Callback() {
                @Override
                public void onBatchCompleted(RequestBatch batch) {}
            });
            requestBatch.executeAsync();

            friendListRequest = new Request(Session.getActiveSession(), "/me/friends", null, HttpMethod.GET, new Request.Callback() {
                @Override
                public void onCompleted(Response response) {
                    try {
                        GraphObject graphObj = response.getGraphObject();
                        if (graphObj != null) {

                            JSONObject jsonObj = graphObj.getInnerJSONObject();
                            JSONArray data=jsonObj.getJSONArray("data");

                            if(data.length()>0 && data!=null)
                            {
                                for(int i=0;i

Ваш ответ на вопрос