2012-10-30 27 views
9

Tôi đã tìm kiếm trên trang web developers.facebook tìm cách sử dụng SDK mới và gửi truy vấn FQL nhưng có vẻ như mọi thứ đã thay đổi và tài liệu đang nói về tất cả các cách khác để yêu cầu me hoặc friends nhưng không phải thông tin cụ thể như những người bạn đó đang sử dụng ứng dụng của tôi hay không?Cách gửi truy vấn FQL bằng SDK Android mới

vì vậy tôi đã viết xuống một truy vấn FQL đẹp

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

và bây giờ, cả tôi phải làm là chạy nó.

Vì yêu cầu duy nhất có vẻ tốt để trả lại danh sách bạn bè là Request.executeMyFriendsRequestAsyncRequest.newMyFriendsRequest Tôi cho rằng đó là bạn của tôi, nhưng cả hai đều không cho phép tinh chỉnh truy vấn FQL.

Tôi làm cách nào để gửi truy vấn và lấy lại danh sách bạn bè hoặc ít nhất là JSONArray?

Hướng dẫn Truy vấn Hackbook - FQL đang sử dụng phiên bản cũ của SDK và tôi không biết phải làm gì.

UPDATE:

tôi đã thêm các dòng mã nghĩ nó sẽ cho phép tôi tạo truy vấn này:

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); 

    } 
} 

Tôi đã làm điều này, suy nghĩ nó sẽ chỉnh sửa theo yêu cầu và thêm thông tin Tôi muốn nhưng tôi nhận được lỗi này:

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) 

Trả lời

21

Bạn sẽ làm một cái gì đó như thế này:

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); 

Bạn đang cơ bản thực hiện một yêu cầu API Graph vào "/ FQL" endpoint với truy vấn của bạn thông qua vào thông số "q".

+0

cảm ơn một nhóm! Tôi đã không chỉ nhận được cách sử dụng định dạng mới của 'Graph-API' với SDK này ... – thepoosh

+0

làm việc giống như ma thuật! Cảm ơn! – TharakaNirmana

+0

Nó thực sự làm việc nhưng tôi có câu hỏi, tại sao nó không trả lại tất cả bạn bè của tôi? chỉ một số ít. – JayR

1

Đây là liên kết đến một chuỗi thứ tại thảo luận này: FQL using facebook android SDK

Bạn cũng có thể chỉ ra một cuộc gọi API Graph với định dạng này: graph.facebook.com/fql?q=QUERY

Vì vậy, trong trường hợp của bạn nó có thể trông giống như: graph.facebook. com/fql? q = chọn uid, tên, pic_square, is_app_user từ người dùng trong đó uid (chọn uid2 từ bạn bè nơi uid1 = me())

EDIT: Dường như mẫu của chức năng này nằm trong mẫu ứng dụng "Hackbook" https://github.com/facebook/facebook-android-sdk/blob/master/examples/Hackbook/src/com/facebook/android/FQLQuery.java

Đáng chú ý nhất, khối này mã (dòng 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()); 
+0

thấy điều này, vấn đề chỉ là vì SDK mới Tôi không có ý tưởng làm thế nào để làm điều này. nó giống như mọi thứ đã thay đổi – thepoosh

+0

@Samantha, hackbook đang sử dụng SDK cũ, phiên bản mới thậm chí không có lớp 'Utility', đó là cơ sở cho toàn bộ câu hỏi – thepoosh

2

Hãy thử phương pháp này

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);  
    } 
+0

Lớp phiên không còn có sẵn trong phiên bản SDK mới nhất. –

Các vấn đề liên quan