2013-01-22 36 views
0

我第一次使用facebook SDK登錄時,它的工作原理沒有任何錯誤。但是當我嘗試註銷並再次登錄時,出現了facebook錯誤。錯誤是"Facebook error: an active access token must be used to query information about the current user"getAccessToken()返回爲空。任何答覆和評論將不勝感激。facebook錯誤:必須使用活動的訪問令牌來查詢有關當前用戶的信息

登錄Activity.java

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     if (APP_ID == null) { 
     Util.showAlert(this, "Warning", "Facebook Application ID must be specified before running"); 
    } 
    try { 
     PackageInfo info = getPackageManager().getPackageInfo("com.ff.fbin", PackageManager.GET_SIGNATURES); 
     for (Signature signature : info.signatures) { 
      MessageDigest md = MessageDigest.getInstance("SHA"); 
      md.update(signature.toByteArray()); 
      Log.e("TAG", "Reverse FB key: "+Base64Coder.encodeLines(md.digest())); 
     } 
    } catch (NameNotFoundException e) { 

    } catch (NoSuchAlgorithmException e) { 

    } 



    mLoginButton = (LoginButton) findViewById(R.id.login); 
    mFacebook = new Facebook(APP_ID); 
    mAsyncRunner = new AsyncFacebookRunner(mFacebook); 
    SessionStore.restore(mFacebook, this); 
    SessionEvents.addAuthListener(new SampleAuthListener()); 
    SessionEvents.addLogoutListener(new SampleLogoutListener()); 
    mLoginButton.init(this, mFacebook, mPermissions); 
} 


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

    boolean isLogined = mFacebook.isSessionValid(); 
    Log.i(TAG, "getAccessToken, onActivity:" +mFacebook.getAccessToken()); 

    if (isLogined){ 
     mAsyncRunner.request("me", new SampleRequestListener()); 
    } 
} 

public class SampleRequestListener extends BaseRequestListener { 

    @Override 
    public void onComplete(final String response, final Object state) { 
     try { 
      Log.d(TAG, "Response2: " + response.toString()); 
      JSONObject json = Util.parseJson(response); 

      //Retrieve user information from facebook 

final Runnable mUpdateResultsSuccess = new Runnable() { 
    @Override 
    public void run() { 
     updateResultsInUiSuccess(); 
    } 
}; 

private void updateResultsInUiSuccess() { 
     if (loginSuccess){ 
      Log.i(TAG, "Login FB done"); 
      finish(); 
      Intent intent2 = new Intent(LoginScreen.this, MainMenu.class); 
      helper.insert_user(mFacebook.getAccessToken()); 
      intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(intent2); 

     } else { 
      loading_text.setText("Error Processing"); 
      Log.i(TAG, "Login FB failed"); 
      try { 
       mFacebook.logout(this); 
      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       Log.e(TAG, "MalformedURLException: "+e.getMessage()); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       Log.e(TAG, "IOException: "+e.getMessage()); 
      } 
      SessionStore.clear(this); 
      pDialog.dismiss(); 
      Toast.makeText(LoginScreen.this, "Login Failed. Please try again", Toast.LENGTH_LONG).show(); 
     } 
} 


public class SampleAuthListener implements com.ff.fbin.SessionEvents.AuthListener { 

    @Override 
    public void onAuthSucceed() { 
     Log.i(TAG, "You have logged in! "); 

     boolean isLogined = mFacebook.isSessionValid(); 
     Log.i(TAG, "isLogined: "+isLogined); 

     if(!isFinishing()){ 

     }; 

     if (isLogined){ 
      mAsyncRunner.request("me", new SampleRequestListener()); 
      pDialog.setMessage("Login in process......"); 
      pDialog.show(); 
     } 

    } 

    @Override 
    public void onAuthFail(String error) { 
     Log.i(TAG, "Login Failed: " + error); 
     Toast.makeText(getApplicationContext(), "Login Failed: " + error, Toast.LENGTH_LONG).show(); 
     pDialog.dismiss(); 
    } 
} 

public class SampleLogoutListener implements com.ff.fbin.SessionEvents.LogoutListener { 
    @Override 
    public void onLogoutBegin() { 
     Log.i(TAG, "Logging out..."); 
    } 

    @Override 
    public void onLogoutFinish() { 
     Log.i(TAG, "You have logged out! "); 
    } 
} 
+0

我得到同樣的事情。我幾天前沒有收到這封信,之後也沒有改變任何內容。 – Wenger

+0

嗯..你發佈了關於這個問題的問題嗎? –

回答

1

問題解決了,顯然這個問題從這些sessionEvents來了。 SessionEvents.addAuthListener(new SampleAuthListener()); SessionEvents.addLogoutListener(new SampleLogoutListener());

我刪除了上面的代碼,並將SessionStore.restore移入了onResume,並且它沒有錯誤地工作。上面的代碼繼續創建新的SampleAuthListener(),並使它堆疊在一起並多次執行相同的操作。這是我的項目導致facebook錯誤的原因。

相關問題