私のアプリケーションはエミュレータで正常に動作しています。そこで、自分のアプリケーションを Android フォンで実行することにしました。アプリケーションを使用して Facebook アカウントにログインしようとしていますが、エミュレーターで正常に動作します。そして、Androidフォンでアプリケーションを実行するとすぐに、常にこの例外が発生します-
01-30 11:06:08.400: E/AndroidRuntime(7463): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=64206, result=0, data=null} to activity {com.facebook.samples.sessionlogin/com.facebook.LoginActivity}: java.lang.NullPointerException
以下は私のコードです-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
buttonLoginLogout = (Button) view.findViewById(R.id.buttonLoginLogout);
textInstructionsOrLink = (TextView) view.findViewById(R.id.instructionsOrLink);
Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
Session session = Session.getActiveSession();
if (session == null) {
if (savedInstanceState != null) {
session = Session.restoreSession(getActivity(), null, statusCallback,
savedInstanceState);
}
if (session == null) {
session = new Session(getActivity());
}
Session.setActiveSession(session);
if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
}
}
updateView();
return view;
}
@Override
public void onStart() {
super.onStart();
Session.getActiveSession().addCallback(statusCallback);
}
@Override
public void onStop() {
super.onStop();
Session.getActiveSession().removeCallback(statusCallback);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(getActivity(), requestCode, resultCode, data);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Session session = Session.getActiveSession();
Session.saveSession(session, outState);
}
private void updateView() {
Session session = Session.getActiveSession();
if (session.isOpened()) {
Intent thesisProject = new Intent(getActivity(), ThesisProjectAndroid.class);
startActivity(thesisProject);
} else {
Log.d(TAG_LOGIN_FAILED,
"There is something wrong with your Facebook account. Please try again.");
textInstructionsOrLink.setText(R.string.instructions);
buttonLoginLogout.setText(R.string.login);
buttonLoginLogout.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
onClickLogin();
}
});
}
}
private void onClickLogin() {
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
} else {
Session.openActiveSession(getActivity(), this, true, statusCallback);
}
}
private void onClickLogout() {
Session session = Session.getActiveSession();
if (!session.isClosed()) {
session.closeAndClearTokenInformation();
}
}
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
updateView();
}
}
私がやっていることは-Facebookアカウントを使用してログインするとすぐに、別のインテントに移動する必要があります(エミュレーターで正常に動作しています)が、このアプリケーションをAndroidフォンにインストールするとすぐに、常にLogin failed
すぐに取得しますFacebookのログインページでユーザー名とパスワードを入力していなくてもアプリケーションが開始され、上記の例外が発生します。
また、誰かが私のロジックが正しいupdateView method
かどうかを教えてくれますか? 私がやりたかったのは、Facebook 認証が正しく、ログインできることを意味するとすぐに、別のインテントに移動する必要があるということです。
なぜこのようなことが起こっているのか、誰か助けてもらえますか?