1

私は次のことを行ってきました: https ://developers.facebook.com/docs/howtos/androidsdk/3.0/run-fql-queries/#step2

これには次のコードがあります(簡単にするためにfqlクエリを変更しました):

queryButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String fqlQuery = "SELECT name FROM user WHERE uid IN " +
                "(SELECT uid2 FROM friend WHERE uid1 = me()LIMIT 2)";
        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);                 
    }
});

特にLog.iを見ると、response.toString()は次の形式で何かを返します。

Result: {Response:  responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"data":[{"name":"John Doe"},{"name":"Jake Josh"}]}}, error: null, isFromCache:false}

今、私の仮定は、応答がjson objであるということだったので、次のようなことを試しました。

JSONObject json=new JSONObject(response);

しかし、これは機能していないので、取得した応答の読み方がよくわかりません。厳密に言えば、名前をループしたいだけですが、実際に応答を読み取る方法がわかりません。

4

2 に答える 2

2

これを試して :

public static final void parseUserFromFQLResponse( Response response )
{
    try
    {
        GraphObject go  = response.getGraphObject();
        JSONObject  jso = go.getInnerJSONObject();
        JSONArray   arr = jso.getJSONArray( "data" );

        for ( int i = 0; i < ( arr.length() ); i++ )
        {
            JSONObject json_obj = arr.getJSONObject( i );

            String name   = json_obj.getString( "name" );

            //...

        }
    }
    catch ( Throwable t )
    {
        t.printStackTrace();
    }
}

次のように電話をかけます。

public void onCompleted(Response response) {
     Log.i(TAG, "Result: " + response.toString());
     parseUserFromFQLResponse(response);
} 
于 2013-01-20T08:22:53.483 に答える
1

ソースGraphObject から、Response次のことができるように見えます。

JSONObject data = response.getGraphObject().getInnerJSONObject();
于 2013-01-20T08:21:07.547 に答える