如何在Android上获取Facebook流和用户配置文件?

问题描述:

在我的android应用程序中,我想同时获取流和用户。 像其他一些应用程序一样,我想用用户的照片和名称来显示新闻提要。 但是,当我使用图形api时,很难获取个人资料图片。如何在Android上获取Facebook流和用户配置文件?

我切换到FQL并通过使用2个查询我可以得到流和用户的图片。 问题是,如果页面发布内容,我可以阅读该页面,但无法同时获取页面配置文件,因此无法正常工作。

所以我的问题是,如果有任何解决方案,以同时显示流和用户的个人资料图片?不管我是否必须使用graph api或fql,无论如何。

这是查询,我可以得到所有流。

requestPost("SELECT source_id, target_id, message FROM stream WHERE filter_key in " 
       + "(SELECT filter_key FROM stream_filter WHERE uid=me() AND type='newsfeed') AND is_hidden = 0 limit 20"); 


public String requestPost(String fql) throws MalformedURLException, 
IOException, JSONException, FacebookError { 

    Bundle parameters = new Bundle(); 
    parameters.putString("format", "json"); 
    parameters.putString("query", fql); 
    parameters.putString("method", "fql.query"); 

    if (mFacebook.isSessionValid()) { 
     parameters.putString("access_token", mFacebook.getAccessToken()); 
    } 
    String url = (fql != null) ? "https://api.facebook.com/method/fql.query?query=QUERY" 
      : "https://api.facebook.com/restserver.php"; 
    String response = mFacebook.request(parameters); 
    response = "{\"data\":" + response + "}"; 

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

    posts.removeAll(posts); 
    for (int i = 0; i < data.length(); i++) { 
     JSONObject jpost = data.getJSONObject(i); 
     Post po = new Post(); 
     po.po_fromid = jpost.getString("source_id"); 
     po.po_message = jpost.getString("message"); 
     requestUser("SELECT name, pic_square FROM user WHERE uid =" 
       + po.po_fromid); 

     posts.add(po); 

    } 
    Message msg = new Message(); 
    msg.what = 0; 

    mHandler.sendMessage(msg); 

    return Util.openUrl(url, "GET", parameters); 

} 

public String requestUser(String fql) throws FileNotFoundException, 
     MalformedURLException, IOException, JSONException, FacebookError { 

    // ///////////////fql///////////////////////////////// 
    Bundle parameters = new Bundle(); 
    parameters.putString("format", "json"); 
    parameters.putString("query", fql); 
    parameters.putString("method", "fql.query"); 

    if (mFacebook.isSessionValid()) { 
     parameters.putString("access_token", mFacebook.getAccessToken()); 
    } 
    String url = (fql != null) ? "https://api.facebook.com/method/fql.query?query=QUERY" 
      : "https://api.facebook.com/restserver.php"; 
    String response = mFacebook.request(parameters); 
    response = "{\"data\":" + response + "}"; 

    JSONObject json = Util.parseJson(response); 
    JSONArray data = json.getJSONArray("data"); 
    // ///////////////fql///////////////////////////////// 
    friends.removeAll(friends); 
    for (int i = 0; i < data.length(); i++) { 
     JSONObject me = data.getJSONObject(i); 
     Friend fr = new Friend(); 
     fr.frname = me.getString("name"); 
     fr.pic = me.getString("pic_square"); 
     friends.add(fr); 
    } 
    return Util.openUrl(url, "GET", parameters); 

} 

你不应该单独查询图片,只是流。流结果将具有用户标识,并且您可以使用用户标识自动构建图片网址。网址格式为:

https://graph.facebook.com/######/picture?type= ??????

其中#####是他们的用户ID,以及??????是图片类型(正方形,小,正常,大)。

+0

感谢回答。但我也想要图片和名字。但流fql只返回id,而不是名称。这是问题所在。 :( – enzo 2011-06-06 05:52:37