我正在嘗試使用Facebook Android SDK登錄Facebook。我已經設置了Fragment
來做到這一點。由於我需要讀取權限併發布權限,因此我正在運行自己的回調。在接受basic_info
和user_birthday
的第一個許可後,我收到錯誤消息。下面是我做這一切的片段:登錄Facebook。每個權限請求的回調,onActivityResult強制關閉
public class MainFragment extends Fragment {
private UiLifecycleHelper uiHelper;
private final List<String> permissions;
public MainFragment() {
permissions = Arrays.asList("basic_info", "user_birthday");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main, container, false);
getActivity().getActionBar().hide();
LoginButton authButton = (LoginButton) view.findViewById(R.id.FBButton);
authButton.setFragment(this);
authButton.setReadPermissions(permissions);
return view;
}
@Override
public void onResume() {
super.onResume();
uiHelper.onResume();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
session.removeCallback(callback);
session.addCallback(newCall);
Log.i("MainFragment", "callback status called");
}
};
private Session.StatusCallback newCall = new Session.StatusCallback() {
Session.NewPermissionsRequest request = new Session.NewPermissionsRequest(getActivity(), Arrays.asList("publish_actions"));
@Override
public void call(Session session, SessionState state, Exception exception) {
session.removeCallback(newCall);
session.addCallback(new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session != null && session.isOpened()) {
//Running profile stuff
Request.newMeRequest(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
//In here I use the users profile information to send them to the correct activity.
}
}).executeAsync();
}
}
});
Line 299: session.requestNewPublishPermissions(request);
}
};
}
這裏是我的logcat錯誤:
02-14 14:20:36.668: E/AndroidRuntime(17146): FATAL EXCEPTION: main
02-14 14:20:36.668: E/AndroidRuntime(17146): Process: com.package.name, PID: 17146
02-14 14:20:36.668: E/AndroidRuntime(17146): java.lang.NullPointerException
02-14 14:20:36.668: E/AndroidRuntime(17146): at com.facebook.Session$AuthorizationRequest$1.startActivityForResult(Session.java:1660)
02-14 14:20:36.668: E/AndroidRuntime(17146): at com.facebook.Session.tryLoginActivity(Session.java:1167)
02-14 14:20:36.668: E/AndroidRuntime(17146): at com.facebook.Session.authorize(Session.java:917)
02-14 14:20:36.668: E/AndroidRuntime(17146): at com.facebook.Session.requestNewPermissions(Session.java:1022)
02-14 14:20:36.668: E/AndroidRuntime(17146): at com.facebook.Session.requestNewPublishPermissions(Session.java:512)
02-14 14:20:36.668: E/AndroidRuntime(17146): at com.package.name.MainFragment$2.call(MainFragment.java:299)
02-14 14:20:36.668: E/AndroidRuntime(17146): at com.facebook.Session$3$1.run(Session.java:1303)
02-14 14:20:36.668: E/AndroidRuntime(17146): at android.os.Handler.handleCallback(Handler.java:733)
02-14 14:20:36.668: E/AndroidRuntime(17146): at android.os.Handler.dispatchMessage(Handler.java:95)
02-14 14:20:36.668: E/AndroidRuntime(17146): at android.os.Looper.loop(Looper.java:136)
02-14 14:20:36.668: E/AndroidRuntime(17146): at android.app.ActivityThread.main(ActivityThread.java:5017)
02-14 14:20:36.668: E/AndroidRuntime(17146): at java.lang.reflect.Method.invokeNative(Native Method)
02-14 14:20:36.668: E/AndroidRuntime(17146): at java.lang.reflect.Method.invoke(Method.java:515)
02-14 14:20:36.668: E/AndroidRuntime(17146): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-14 14:20:36.668: E/AndroidRuntime(17146): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-14 14:20:36.668: E/AndroidRuntime(17146): at dalvik.system.NativeStart.main(Native Method)
我被告知錯誤是因爲uiHelper
不知道活動我說關於。我不確定這意味着什麼以及如何修復。希望這裏的某個人可以給我一些關於如何解決錯誤的建議。真的會有所幫助,我感覺這是讓這個工作成功的最後一步。第一個權限請求顯示,我接受,然後發生這種情況。
我真的很感謝任何幫助,在此先感謝。
在你的代碼中發佈一些行號 –
行299似乎是唯一指向某些東西,我補充說。其餘不適用。第95行是onResume方法中的空格,第136行是我沒有使用的完全註釋掉的方法。在第一個StatusCallback'回調'之前。 –
你不能在堆棧跟蹤中找到一個空格(空行),它必須已經過期 –