2010-09-16 34 views

回答

0

它看起來像Android Facebook SDK不會對舊的REST API的參數進行URL編碼。所以當你發送一個大的FQL查詢時,它不能處理所有的空格和特殊字符。我可能把叉子了GitHub上修復此,但在此期間,你可以在com.facebook.android.Util第26行改爲:

sb.append(key + "=" + URLEncoder.encode(parameters.getString(key))); 

通知的URLEncoder的通話那裏。這實際上是該方法的不贊成使用的版本,但它現在可以正常工作,當我推送到github時,我會包含正確的版本。

2

下面是使用建議的補丁一些示例代碼:

Bundle b = new Bundle(); 
    b.putString("access_token", facebookManager.mFacebook.getAccessToken()); 
    b.putString("query", "SELECT name FROM user WHERE uid = me()"); 

    try { 
     String myResult = Util.openUrl("https://api.facebook.com/method/fql.query", "GET", b); 
      Log.i("MyResult", myResult); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
8

,這大概比提到一個更好的辦法。使用當前版本的API,您不需要手動添加訪問令牌或使用Util.openURL。

 Bundle params = new Bundle(); 
     params.putString("method", "fql.query"); 
     params.putString("query", "SELECT name, uid, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me()) ORDER BY name"); 
     String response = $fb.request(params); 
     response = "{\"data\":" + response + "}"; 

     JSONObject json = Util.parseJson(response); 
     JSONArray data = json.getJSONArray("data"); 

     for (int i = 0, size = data.length(); i < size; i++){ 
      JSONObject friend = data.getJSONObject(i); 

      String id = friend.getString("uid"); 
      String name = friend.getString("name"); 
      ... 
     } 
+0

什麼是$ fb這裏? – 2015-11-28 03:27:57

1

這裏是我的解決方案:

你真正需要做的是使用graphPathRequest。在android SDK中,它已經提供了2個版本,一個是快速執行方法。另一種方法是在調用此類請求對象的execute之前發出請求並修改該請求。我的方法使用更高版本。

如果你是內FacebookActivity,只需撥打:

Request r = new Request.newGraphPathRequest(getSession(), "fql", 
    new Request.Callback() { 
     @Override 
     public void onCompleted(Response response) { 
      // your FQL result will be stored in response.getGraphObject() 
      Log.d("result", response.toString()); 
     } 
    } 
); 
r.getParameters().putString("q", YOUR_QUERY_HERE); 
r.executeAsync(); 

希望這有助於。

請注意,我使用AndroidSDK 3.0

+0

SdK 4中缺少請求。 – 2015-11-29 00:14:11

相關問題