android - 如何在 android 成功登录后 Conceal Facebook 登录页面 Activity ?

标签 android facebook android-activity

我是 Android 新手。我在我的 Android 应用程序中加入了 Facebook。我有一个带有按钮的登录页面。单击该按钮,将出现 FB 登录页面。成功登录 Facebook 后,用户将转到 MainActivity。我想在成功登录FB后 Conceal 我的登录页面。也就是说,当我重新加载应用程序时,如果用户已经登录,那么应该只显示 MainActivity 而不是登录页面。

我的代码如下:

public class Login extends Activity {
private static final String URL_PREFIX_FRIENDS = "https://graph.facebook.com/me/friends?access_token=";

//private TextView textInstructionsOrLink;
 private ImageButton buttonLoginLogout;
 public static final String PREFS_PRIVATE = "PREFS_PRIVATE";
 private Button b;

private Session.StatusCallback statusCallback = new SessionStatusCallback();
Databasehandler db=new Databasehandler(this);
HashMap<String, String>map=new HashMap<String, String>();
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);
    buttonLoginLogout = (ImageButton)findViewById(R.id.imageButton1);
    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
    Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, statusCallback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
            session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
        }
    }

    updateView();
}

@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);
}
@Override
protected void onDestroy() {

    super.onDestroy();

}
private void updateView() {
    Session session = Session.getActiveSession();
    if (session.isOpened()) {
        Request.executeMeRequestAsync(session,new Request.GraphUserCallback() {

            @Override
            public void onCompleted(GraphUser user, Response response) {
                // TODO Auto-generated method stub
                final String t1=user.getId();
                final String t2=user.getName();
                 // SharedPreferences myPrefs =getSharedPreferences("myprefs",MODE_WORLD_READABLE);
                int count=db.getme();
                if(count==0)
                {
                map.put("uid",t1.toString());
                map.put("name",t2.toString());
                db.insertnewuser(map);
                }
    }
        });

      Intent ik=new Intent(Login.this,MainActivity.class);

        ik.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        startActivity(ik);
     } else {

        buttonLoginLogout.setOnClickListener(new 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(this, true, statusCallback);
    }
}
  private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        updateView();
    }
}
}

最佳答案

只需在 updateView 方法中添加以下代码即可。

Intent intent = new Intent(Login.this, MainActivity.class);
startActivity(intent);

所以你的完整方法看起来像下面的代码。

private void updateView() {
    Session session = Session.getActiveSession();
    if (session.isOpened()) {
        Request.executeMeRequestAsync(session,new Request.GraphUserCallback() {

            @Override
            public void onCompleted(GraphUser user, Response response) {
                // TODO Auto-generated method stub
                final String t1=user.getId();
                final String t2=user.getName();
                 // SharedPreferences myPrefs =getSharedPreferences("myprefs",MODE_WORLD_READABLE);
                int count=db.getme();
                if(count==0)
                {
                map.put("uid",t1.toString());
                map.put("name",t2.toString());
                db.insertnewuser(map);

                Intent intent = new Intent(Login.this, MainActivity.class);
                startActivity(intent);

                }
    }

所以基本上它会在打开 facebook session 时自动移动到下一个屏幕。

关于android - 如何在 android 成功登录后 Conceal Facebook 登录页面 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22810088/

相关文章:

android - 应用程序配置错误,无法使用 Release Key Hash 登录 Facebook

php - 动态生成 Facebook Open Graph 元标签

ios - iOS 9 上的 Facebook 分享按钮打开浏览器而不是本地 Facebook 应用程序

android - startActivity 不会启动其他应用程序的新 Activity

php - 写入在线mysql数据库

android - 我们可以绕过 Intent 相机中的保存和删除选项以在 Android 中拍摄图像吗?

android - 在全屏 webview nokia x 中输入视频时出现 NullPointerException

android - 如何更改 ListPreference 标题的颜色?

java - 从 JAR/Lib 启动 Activity

android字符串资源与应用程序大小