我切換從Activity
某些Android Facebook的代碼爲Fragment
。在切換之前一切正常,但現在onComplete()
回調沒有被執行。爲什麼Android Facebook界面不能使用Fragments?
Facebook代碼不能與片段,還是我做錯了什麼?
這裏的原代碼(在SherlockActivity
):
if (!mFacebook.isSessionValid()) {
mFacebook.authorize(MyActivity.this, permissions, new DialogListener() {
@Override
public void onComplete(Bundle values) { ... } // CALLED AS EXPECTED
}
}
而這裏的新代碼(在SherlockFragment):
if (!mFacebook.isSessionValid()) {
mFacebook.authorize(getActivity(), permissions, new DialogListener() {
@Override
public void onComplete(Bundle values) { ... } // DOES NOT GET CALLED
}
}
的活性和分片包括相同的onActivityResult( )根據Facebook的要求:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mFacebook.authorizeCallback(requestCode, resultCode, data);
}
感謝您的幫助!
編輯:一個類似的問題被要求here,其中接受的答案是將Fragment
更改爲FragmentActivity
。但我不明白這有什麼幫助,因爲它不再是Fragment
(我需要其他原因)。建議?
編輯2:我推出了我自己的解決方案。見下文。
Sooo help!感謝您查看這個! – ByteMe
嗨 我正在嘗試這個解決方案,但是我在myCallback函數中的facebook.authorizeCallback上得到了一個NetworkOnMainThreadException。 謝謝! –
我不確定authorizeCallback()實際上是否執行網絡事務,但如果是這樣,您需要將它從任何面向用戶的Activity移出(使用類似AsyncTask的東西)。這是因爲Android具有嚴格的模式,可以阻止面向用戶的線程執行網絡事務。對於快速開發的解決方法,可以在Activity的onCreate()調用中放入以下兩行:StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()。permitAll()。build(); StrictMode.setThreadPolicy(policy);確保在生產之前刪除解決方法並進行修復。祝你好運! – gcl1