2011-02-11 78 views
6

我已經使用了這個確切的代碼和其他工作到一定程度,但我不斷收到以下錯誤:Android - OAuthException - 我不斷收到:「一個活動的訪問令牌必須用於查詢有關當前用戶的信息」

{"error":{"type":"OAuthException","message":"An active access token must be used to query information about the current user."}} 

這裏是代碼:我已經使用access_token我回來並驗證它反對插入到我的瀏覽器,它的效果很好。但是這段代碼似乎不是使用我回來的訪問令牌,或者我沒有設置它。我甚至嘗試了FB.setAccessToken()方法以及params.putString(「access_token」,MY_ACCESS_TOKEN)。

我想知道,因爲我不需要更改訪問令牌的網站網址的工作,我不會認爲我不需要做任何特殊的access_token像ecoding它像一個url ?

感謝您的幫助。我在網上搜索了幾個小時的答案,似乎沒有任何答案。

Bundle params = new Bundle(); 

params.putString("message", "Test"); 
params.putString("name", "American Virgin"); 
params.putString("link", "http://bit.ly/12345"); 
params.putString("description", "A Freshman College Girl on a scholarship from an ..."); 
params.putString("picture", "http://xxx/MOV1026.jpg"); 

mAsyncRunner.request("me/feed", params, "POST", new TestRequestListener()); 
+0

而Facebook的應用程序安裝在我的設備我有同樣的問題,否則它完美的作品,並獲得數據用戶。你有沒有找到這個錯誤的解決方案?如果是這樣,請張貼你的答案。 – 2012-03-15 05:55:10

回答

1

您收到的訪問令牌需要URL解碼。
我使用URLDecoder.decode()MultiPartEntity(HttpMultipartMode.STRICT);

+0

好.. facebook庫做URL解碼!你還在哪裏改變? – Puran 2011-04-17 19:34:10

4

您是否嘗試過包含以下代碼?

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     mFacebook.authorizeCallback(requestCode, resultCode, data); 
} 

根據文檔,這必須包括或認證將無法正常工作,這反過來又可能導致您遇到的錯誤。我有同樣的問題,但後來意識到我錯過了這一點。

2

現在它工作正常。我只是把代碼放在評論中。

public void authorize(Activity activity, String[] permissions, 
     int activityCode, final DialogListener listener) { 

    boolean singleSignOnStarted = false; 

    mAuthDialogListener = listener; 

    // Prefer single sign-on, where available. 
    //if (activityCode >= 0) { 
    //  singleSignOnStarted = startSingleSignOn(activity, mAppId, 
    //    permissions, activityCode); 
    // } 
    // Otherwise fall back to traditional dialog. 
    if (!singleSignOnStarted) { 
     startDialogAuth(activity, permissions); 
    } 
} 
0

我剛剛從不同的原因遇到此錯誤消息。 AsyncFacebookRunner似乎在傳入時從Facebook對象中提取值,而不是持有對它的引用。因此,這樣的事情是行不通的:

 

    Facebook fb = new Facebook("appid"); 
    AsyncFacebookRunner runner = new AsyncFacebookRunner(fb); 
    fb.setAccessToken(access_token); 
    fb.setAccessExpires(expires); 
    runner.request("me", new FbRequestListener()); 

但像這樣將工作:

 

    Facebook fb = new Facebook("appid"); 
    fb.setAccessToken(access_token); 
    fb.setAccessExpires(expires); 
    AsyncFacebookRunner runner = new AsyncFacebookRunner(fb); 
    runner.request("me", new FbRequestListener()); 

相關問題