如何在Android上获取Facebook流和用户个人资料?

时间:2011-06-05 11:30:41

标签: android facebook stream facebook-fql

在我的Android应用程序中,我希望同时获得流和用户。 像其他一些应用程序一样,我想用用户的图片和名称来显示新闻源。 但是当我使用图形api时,很难获得个人资料图片。

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

所以我的问题是,是否有任何解决方案同时显示流和用户的个人资料图片?无论我是否必须使用图形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);

}

1 个答案:

答案 0 :(得分:1)

您不需要单独查询图片,只需查询流。流结果将具有用户ID,您可以使用用户ID自动构建图片网址。网址格式为:

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

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