2012-07-16 62 views
1

我想與Facebook進行交流,做簡單的事情。目前,我可以將用戶登錄並貼到他們的牆上。但無論出於何種原因,我似乎無法獲取諸如他們的名字等公共信息。我始終得到這個錯誤:Android Facebook Oauthexception與有效的訪問令牌

{「error」:{「message」:「Syntax error \」字符串的預期結束而不是\「?\」。\「在字符4:name?access_token = MYACCESSTOKEN」, 「類型」: 「OAuthException」, 「代碼」:2500}}

這裏是呼叫:

SampleRequestListener srl = new SampleRequestListener(); 
AsyncFacebookRunner afr = new AsyncFacebookRunner(facebook); 
afr.request("http://graph.facebook.com/me?fields=name", (RequestListener)srl); 

即呼叫是有效的會話內進行的(在DialogListener用於.Authorize所述的onComplete部)。用我和的access_token完全相同的字符串,如上面我可以請求在http://developers.facebook.com/tools/explorer/

工作得很好,而解析在RequestListener.onComplete

JSONObject json = Util.parseJson(response); 
final String name = json.getString("name"); 
System.out.println("Hi, my name is " + name); 

響應謝謝你的時候發生錯誤。歡迎所有的投入。

UPDATE *

有兩件事情正在進行。在facebook API中,Util.openUrl附加了一個「?」字段名稱和access_token之間(如下面的答案所指出的)。這看起來很奇怪。我想知道我是否抽取了舊版本的API或其他東西。你會認爲這將設置正確。

另外,我錯誤地調用的方法: 此:

afr.request("http://graph.facebook.com/me?fields=name", (RequestListener)srl); 

應該是:

afr.request("me?fields=name", (RequestListener)srl); 
+0

你能不能幫我解決我的問題http://stackoverflow.com/q/17102992/1767260。我認爲它與你的問題類似。但我無法弄清楚我的代碼中的問題。你可以檢查 – user1767260 2013-06-17 09:04:54

回答

1

貌似正在發送的實際要求是一樣的東西

/me?fields=name?access_token=MYACCESSTOKEN 

和那當然是錯誤的;它應該是第二個參數之前的&符號而不是問號。

您必須查找代碼中將訪問令牌添加爲參數的位置。在附加access_token參數之前,應該檢查該URL是否已經包含問號。

+0

呵呵。這似乎很奇怪......「?」正在Facebook API Util.openUrl方法中添加。那真的是我應該修改的東西嗎?我給它一個鏡頭,現在的錯誤是: com.facebook.android。FacebookError:(#100)未知字段:名稱 – 2012-07-16 20:42:57

3

如果您使用的是com.facebook.Request類,那麼只需使用以下形式的構造函數:請求(會話會話,String graphPath,Bundle參數,HttpMethod httpMethod,Callback回調)並將參數傳遞給「參數」參數。

就像:

if (GlobalApplication.accessToken != null && !GlobalApplication.accessToken.isExpired()) { 
        /* make the API call */ 
        Bundle b = new Bundle(); 
        b.putString("fields", "id,created_time,description,embed_html,name,source,picture"); 
        new GraphRequest(GlobalApplication.accessToken, "/me/videos", 
          b, HttpMethod.GET, new GraphRequest.Callback() { 
         @Override 
         public void onCompleted(GraphResponse response) { 
          /* handle the result */ 
          Log.i("", ""); 
          String string = response.toString(); 

          JSONObject object = response.getJSONObject(); 
          JSONArray array = response.getJSONArray(); 
          Log.i("", ""); 
         } 
        }).executeAsync(); 
+0

您能否顯示源代碼示例? – 2015-04-23 22:10:17

+0

什麼應該是關鍵和價值? – 2015-04-23 22:16:36