2012-03-30 34 views
1

我正在使用Facebook Android SDK來允許SSO。我已經按照Hackbook中的指南和教程進行了操作,但是碰巧手機似乎停留在白色屏幕上,10秒後出現進度對話框,並且過程按預期繼續。Facebook android SDK和白屏

我努力解決這個問題(異步任務,透明佈局),但似乎沒有任何工作。

這是Facebook的活動代碼:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.facebook_activity); 
    /* 
    * Get existing access_token if any 
    */ 
    mPrefs = getPreferences(MODE_PRIVATE); 
    String access_token = mPrefs.getString("access_token", null); 
    long expires = mPrefs.getLong("access_expires", 0); 
    if (access_token != null) { 
     facebook.setAccessToken(access_token); 
    } 
    if (expires != 0) { 
     facebook.setAccessExpires(expires); 
    } 

    /* 
    * Only call authorize if the access_token has expired. 
    */ 
    // showProgress(); 
    if (!facebook.isSessionValid()) { 

     authorizeFacebook(); 
    } else { 
     signalResult(); 
    } 
} 


private void authorizeFacebook() { 
    facebook.authorize(this, new String[] { "email", "offline_access", 
      "publish_stream", "user_about_me" }, new DialogListener() { 
     @Override 
     public void onComplete(Bundle values) { 
      // SharedPreferences.Editor editor = mPrefs.edit(); 
      // editor.putString("access_token", 
      // facebook.getAccessToken()); 
      // editor.putLong("access_expires", 
      // facebook.getAccessExpires()); 
      // editor.commit(); 
      signalResult(); 
      // retrieve call obtain information and register 

     } 

     @Override 
     public void onFacebookError(FacebookError error) { 
     } 

     @Override 
     public void onError(DialogError e) { 
     } 

     @Override 
     public void onCancel() { 
     } 
    }); 
} 

private void signalResult() { 
    // retrieve user info 
    new AsyncFacebookRunner(facebook).request("me", 
      new AsyncFacebookRunner.RequestListener() { 

       @Override 
       public void onMalformedURLException(
         MalformedURLException e, Object state) { 
        authorizeFacebook(); 
       } 

       @Override 
       public void onIOException(IOException e, Object state) { 
        authorizeFacebook(); 
       } 

       @Override 
       public void onFileNotFoundException(
         FileNotFoundException e, Object state) { 
        authorizeFacebook(); 
       } 

       @Override 
       public void onFacebookError(FacebookError e, Object state) { 
        authorizeFacebook(); 
       } 

       @Override 
       public void onComplete(String response, Object state) { 
        Intent intent = new Intent(); 
        String accessToken = facebook.getAccessToken(); 
        String id = null; 
        JSONObject json; 
        try { 
         json = new JSONObject(response); 
         id = json.getString("id"); 
         intent.putExtra(WeOrderApplication.FACEBOOK_USER, id); 
         intent.putExtra(WeOrderApplication.FACEBOOK, 
           accessToken); 
         // hideProgress(); 
         setResult(RESULT_OK, intent); 
         finish(); 
        } catch (JSONException e) { 
         authorizeFacebook(); 
         e.printStackTrace(); 
        } 

       } 
      }); 

} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    facebook.authorizeCallback(requestCode, resultCode, data); 
} 

,它是通過一個簡單的StartActivity調用。 facebook_activity是一個沒有任何內容的linearLayout。我爲FacebookActivity設置了一個半透明的主題(android:theme =「@ android:style/Theme.Translucent.NoTitleBar」),使其至少透明,但它也不起作用。

感謝任何人可以幫助解決這個問題。

回答

0

我認爲這可能是因爲facebook.authorize()signalResult()都是異步運行的。該代碼需要首先調用授權,但之後需要在網絡上等待該呼叫才能開始該意圖。這可能會暫停應用程序。

或者,由於所有的錯誤狀態都會調用authorizeFacebook(),並且這些請求中的每一個都是異步的,您是否有可能同時拋出多個線程?

0

請更新您的授權Facebook()函數的代碼,它將解決您的問題。

facebook.authorize(mActivity, mPermissions, Facebook.FORCE_DIALOG_AUTH, 
      new LoginDialogListener()); 

並參見下面的鏈接瞭解更多信息。

Facebook Login Issue