2

現在、私のセッションは常に null です。バンドルが null にならないとします。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_scene);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    RelativeLayout rLayout = (RelativeLayout) findViewById(R.id.splashbg);
    rLayout.setBackgroundResource(R.drawable.default_bg);

    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);

    Session session = Session.getActiveSession();

    if (session == null) {
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);
    }

    session = Session.getActiveSession();
    if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
        session.openForRead(new Session.OpenRequest(SplashScene.this)
                .setCallback(statusCallback));
    } else {
        updateView();
    }
}

@Override
public void onBackPressed() {
    // disable back button by overriding it
}

@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(this, requestCode,
            resultCode, data);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Session session = Session.getActiveSession();
    Session.saveSession(session, outState);
}

private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state,
            Exception exception) {
        if (session.isOpened()) {
            GlobalFunction.token = session.getAccessToken();
            IsExistMember checkmember = new IsExistMember();
            checkmember.execute();
        }
    }
}

private void updateView() {
    Session session = Session.getActiveSession();
    if (!session.isOpened() && !session.isClosed()
            && session.getState() != SessionState.OPENING) {
        OpenRequest open = new OpenRequest(this)
                .setCallback(statusCallback);
        List<String> permission = new ArrayList<String>();
        permission.add("email");
        open.setPermissions(permission);
        session.openForRead(open.setCallback(statusCallback));
    } else {
        Session.openActiveSession(this, true, statusCallback);
        // Intent intent = new Intent(SplashScene.this, WelcomeScene.class);
        // startActivity(intent);
        // finish();
    }

}

セッションを電話に保持するにはどうすればよいですか。次回このアプリを実行するときに、新しいセッションを作成する必要はありません。

この でセッションをチェックしていましたActivity。存在する場合は続行し、そうでない場合は他のアクティビティに移動して facebook でサインインし、バンドルを電話に保存します。

チュートリアルに基づいて、すべてを で行うように教えられましたActivityが、別の で個別に行いたいですActivity

みたいなsharedpreferenceのがありますが、iOSと同じappdelegateでしょうか?

4

2 に答える 2

0

常に新しいセッションを作成する必要があります。ただし、ユーザーが以前にアプリを承認している場合、sessionState は CREATED_TOKEN_LOADED になり、openForRead を呼び出すと、ユーザーの操作はありません (保存された資格情報でサイレントに開きます)。

セッションの新しいインスタンスを作成したくないのはなぜですか?

于 2013-01-09T18:46:48.993 に答える
0

onRestoreInstanceStateおよびコールバックを使用しonSaveInstanceStateて値 (状態変数) を保存し、次回の起動時にそれらを復元します。

これらがどのように機能するかをよく理解するには、Android アクティビティのライフサイクルを見てください。 http://developer.android.com/training/basics/activity-lifecycle/recreating.html

于 2013-01-09T09:58:35.387 に答える