2010-09-16 58 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

相关问题