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

Я искал сайт developers.facebook, который ищет способ использовать новый SDK и отправлять запросы FQL, но похоже, что все изменилось, и в документации говорится о самых разных способах запроса или friends но не конкретных Информация, такая как те друзья, которые используют мое приложение или нет?

Поэтому я записал хороший запрос FQL

 select uid, name, pic_square, is_app_user from user where uid in (select uid2 from friend where uid1 = me()) 

И теперь все, что мне нужно сделать, это запустить его.

Поскольку единственными запросами, которые кажутся хорошими для возвращения списка друзей, являются Request.executeMyFriendsRequestAsync и Request.newMyFriendsRequest Я предположил, что они были моими друзьями, но оба не позволяют точную настройку запроса FQL.

Как я могу отправить запрос и вернуть список друзей или, по крайней мере, JSONArray ?

Учебник Hackbook – FQL Query использует старую версию SDK, и я не знаю, что делать.

ОБНОВИТЬ:

Я добавил эти строки кода, думая, что он позволит мне создать этот запрос:

 public void onCreate(Bundle savedInstanceState) { // SOME CODE this.openSession(); } protected void onSessionStateChange(SessionState state, Exception exception) { if (state.isOpened()) { Session activeSession = getSession().getActiveSession(); facebook.setAccessToken(activeSession.getAccessToken()); facebook.setAccessExpires(activeSession.getExpirationDate().getTime()); Request req = Request.newMyFriendsRequest(activeSession, new GraphUserListCallback() { @Override public void onCompleted(List<GraphUser> users, Response response) { System.out.println(response.toString()); } }); Bundle params = new Bundle(); params.putString("method", "fql.query"); params.putString("query", "select uid, name, pic_square, is_app_user " + "from user where uid in " + "(select uid2 from friend where uid1 = me())"); req.setParameters(params); Request.executeBatchAsync(req); } } 

Я сделал это, думая, что он отредактирует запрос и добавит нужную мне информацию, но я получил эту ошибку:

 10-31 09:36:31.647: E/AndroidRuntime(15986): java.lang.NullPointerException 10-31 09:36:31.647: E/AndroidRuntime(15986): at com.sample.facebook.to.db.MainActivity$1.onCompleted(MainActivity.java:62) 10-31 09:36:31.647: E/AndroidRuntime(15986): at com.facebook.Request$2.onCompleted(Request.java:269) 10-31 09:36:31.647: E/AndroidRuntime(15986): at com.facebook.Request$4.run(Request.java:1197) 10-31 09:36:31.647: E/AndroidRuntime(15986): at android.os.Handler.handleCallback(Handler.java:587) 10-31 09:36:31.647: E/AndroidRuntime(15986): at android.os.Handler.dispatchMessage(Handler.java:92) 10-31 09:36:31.647: E/AndroidRuntime(15986): at android.os.Looper.loop(Looper.java:130) 10-31 09:36:31.647: E/AndroidRuntime(15986): at android.app.ActivityThread.main(ActivityThread.java:3691) 10-31 09:36:31.647: E/AndroidRuntime(15986): at java.lang.reflect.Method.invokeNative(Native Method) 10-31 09:36:31.647: E/AndroidRuntime(15986): at java.lang.reflect.Method.invoke(Method.java:507) 10-31 09:36:31.647: E/AndroidRuntime(15986): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 10-31 09:36:31.647: E/AndroidRuntime(15986): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 10-31 09:36:31.647: E/AndroidRuntime(15986): at dalvik.system.NativeStart.main(Native Method) 

Solutions Collecting From Web of "Как отправить запрос FQL с новым Android SDK"

Вы бы сделали что-то вроде этого:

 String fqlQuery = "select uid, name, pic_square, is_app_user 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, "Got results: " + response.toString()); } }); Request.executeBatchAsync(request); 

Вы в основном делаете запрос API Графа к конечной точке «/ fql», когда ваш запрос передается параметру «q».

Попробуйте этот метод

 void a(){ String fqlQuery = "{" + "'friends':'SELECT uid2 FROM friend WHERE uid1 = me() LIMIT 25'," + "'friendinfo':'SELECT uid, name, pic_square FROM user WHERE uid IN " + "(SELECT uid2 FROM #friends)'," + "}"; 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()); } }); Request.executeBatchAsync(request); } 

Вот ссылка на поток, который обсуждает это: FQL с помощью флешки и Android SDK

Вы также можете просто вызвать вызов API Графа в этом формате: graph.facebook.com/fql?q=QUERY

Итак, в вашем случае это может выглядеть так: graph.facebook.com/fql?q=select uid, name, pic_square, is_app_user от пользователя, где uid in (выберите uid2 от друга, где uid1 = me ())

EDIT: Кажется, что образец этой функциональности живет в образце приложения «Hackbook» https://github.com/facebook/facebook-android-sdk/blob/master/examples/Hackbook/src/com/facebook/android/ FQLQuery.java

Прежде всего, этот блок кода (строка 61):

 String query = mFQLQuery.getText().toString(); Bundle params = new Bundle(); params.putString("method", "fql.query"); params.putString("query", query); Utility.mAsyncRunner.request(null, params, new FQLRequestListener());