当前位置: 首页 > 知识库问答 >
问题:

facebook登录成功后启动新活动

戈曾琪
2023-03-14

我一直试图从一个成功的登录尝试开始一个新的活动与facebook集成,然而,当登录按钮按下后,登录pin,它返回相同的活动,登录按钮是打开的。

我已经有了一个转移到下一个活动的意图,但是它似乎没有任何响应登录成功。

import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.util.Log;

import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphResponse;
import com.facebook.login.Login;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import android.widget.Toast;
import com.facebook.GraphRequest;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import org.json.JSONObject;


    public class userlogin extends FragmentActivity {

        LoginButton loginButton; //The Facebook login button
        TextView loginstatus;
        CallbackManager callbackManager;
        private AccessToken accessToken;


        @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                FacebookSdk.sdkInitialize(getApplicationContext());
                setContentView(R.layout.activity_userlogin);
                loginButton = (LoginButton) findViewById(R.id.fb_login_button);
                loginstatus = (TextView)findViewById(R.id.loginstatus);
                callbackManager = CallbackManager.Factory.create();
                loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {

        // **Description: If the user cancels the login before it is completed a message will
        //                be shown to let them know that they are not logged in
        //**Parameters:
        //** Loginresult: the results of the login attempt.
        //**
        //**Precondition: loginButton must have been clicked first
        //**
        //**throws: N/A
        //** returns: a textView that displays a message of whether or not the login was succesful

            public void onSuccess(LoginResult loginResult) {
            loginstatus.setText("Login Success");
            accessToken = loginResult.getAccessToken();

            Toast.makeText(userlogin.this, "Eureka", Toast.LENGTH_LONG).show();
            GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {


                public void onCompleted(JSONObject object, GraphResponse response) {
                    Log.d("FB", "complete");
                    Log.d("FB", object.optString("name"));
                    Log.d("FB", object.optString("link"));
                    Log.d("FB", object.optString("id"));
                    Log.d("FB", object.optString("gender"));
                    TextView Username;
                    Username = (TextView) findViewById(R.id.loginstatus);
                    String id = object.optString("id");
                    String name = object.optString("name");
                    Username.setText("Welcome:" + name);
                    ImageView userPhoto = (ImageView) findViewById(R.id.facebookuserPortrait);
                    String i = "http://graph.facebook.com/" + id + "/picture?type=large";
                    Glide.with(userlogin.this).load(i).override(350, 350).into(userPhoto);
                    Intent intent = new Intent(userlogin.this, AlertsandPlanning.class);
                        startActivity(intent);


                }

                // **Description: If the user cancels the login before it is completed a message will
                //                be shown to let them know that they are not logged in
                //**Parameters: N/A
                //**
                //**Precondition: loginButton must have been clicked first
                //**
                //**throws: N/A
                //** returns: a textView that displays a message
                public void onCancel() {
                    loginstatus.setText("Login Canceled");
                }

                // **Description: If the user has an error during the login before it is completed
                //                a message will be shown to let them know that they are not logged in
                //**Parameters: FacebookException: an error transpoding if the login fails
                //**
                //**Precondition: loginButton must have been clicked first
                //**
                //**throws: Exception
                //** returns: a textView that displays a message
                public void onError(FacebookException exception) {
                    loginstatus.setText("Something went wrong \n+" +
                            "Check your credentials and try again");

                }
            });
        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {

        }

        protected void onActivivityResult(int requestCode, int resultCode, Intent data) {
            userlogin.super.onActivityResult(requestCode, resultCode, data);
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }


    });
}

}

我感谢任何给予的洞察力,我可能会从头开始这项活动,并再次尝试,如果没有任何似乎工作。

重申这个问题:点击“Continue with Facebook”按钮,显示的下一个活动是userlogin活动,而不是AlertsandPlanning活动。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import com.facebook.CallbackManager;
import com.facebook.login.widget.LoginButton;
import com.facebook.FacebookSdk;
import android.view.View;
import com.facebook.login.LoginResult;
import com.facebook.FacebookCallback;
import org.json.JSONObject;
import android.widget.Toast;
import com.facebook.AccessToken;
import com.facebook.login.LoginManager;
import com.facebook.GraphResponse;
import com.facebook.FacebookException;
import com.facebook.GraphRequest;
import com.facebook.GraphRequestAsyncTask;
    public class UserLogin extends AppCompatActivity implements View.OnClickListener {

LoginButton btnFacebookLogin;
CallbackManager callbackManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    setContentView(R.layout.activity_user_login);
    callbackManager = CallbackManager.Factory.create();
    setUI();
}

private void setUI() {


    btnFacebookLogin = (LoginButton) findViewById(R.id.FBLoginBtn);

    btnFacebookLogin.setOnClickListener(this);
    btnFacebookLogin.setReadPermissions("email", "public_profile");

}

@Override
public void onClick(View v) {
    switch (v.getId()) {

        case R.id.FBLoginBtn:
            facebookLogin();
    }
}

private void facebookLogin() {
    // Callback registration
    btnFacebookLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            final AccessToken accessToken = loginResult.getAccessToken();
            GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject user, GraphResponse graphResponse) {
                    LoginManager.getInstance().logOut();
                    String username = (user.optString("name"));
                }
            }).executeAsync();


            Toast.makeText(getApplicationContext(), "Login Success with facebook", Toast.LENGTH_SHORT).show();
            Intent startAlertsAndPlanning = new Intent(UserLogin.this, AlertsAndPlanning.class);
            startActivity(startAlertsAndPlanning);


        }

        @Override
        public void onCancel() {
            // App code
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
        }
    });

}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

}

共有1个答案

葛飞扬
2023-03-14

请尝试使用以下代码。希望对您有帮助,请使用CamelCase表示类名。

public class Userlogin extends AppCompatActivity implements View.OnClickListener {

        LoginButton btnFacebookLogin;
        CallbackManager callbackManager;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            FacebookSdk.sdkInitialize(getApplicationContext());
            setContentView(R.layout.activity_main);
            callbackManager = CallbackManager.Factory.create();
            setUI();
        }

        private void setUI() {


            btnFacebookLogin = (LoginButton) findViewById(R.id.btnFacebookLogin);

            btnFacebookLogin.setOnClickListener(this);
            btnFacebookLogin.setReadPermissions("email", "public_profile");

        }

        @Override
        public void onClick(View v) {
            switch (v.getId()) {

                case R.id.btnFacebookLogin:
                    facebookLogin();
            }
        }

        private void facebookLogin() {
    // Callback registration
            btnFacebookLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    // App code

                    final AccessToken accessToken = loginResult.getAccessToken();
                    GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject user, GraphResponse graphResponse) {
                            LoginManager.getInstance().logOut();
                            username = (user.optString("name"));
                        }
                    }).executeAsync();


                    Toast.makeText(getApplicationContext(), "Login Success with facebook", Toast.LENGTH_SHORT).show();
                    startActivity(new Intent(Userlogin .this, AlertsandPlanning.class));


                }

                @Override
                public void onCancel() {
                    // App code
                }

                @Override
                public void onError(FacebookException exception) {
                    // App code
                }
            });

        }


        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }
 类似资料:
  • 我正在用android编程。当我使用(LoginActivity)成功登录时,下一步是加载MainActivity,这个MainActivity是一个导航抽屉活动,但我遇到了这个错误: 致命异常:主进程:com.example.administrador.vicon,PID:32149java.lang.运行时异常:无法启动活动ComponentInfo{com.example.administr

  • 问题内容: 我想要在spring成功注册后自动登录:我有一个受保护的页面,需要登录才能访问它们,我要在注册后跳过登录页面并进行自动登录,以便用户可以看到受保护的页面有我吗?我正在使用spring 3.0,spring security 3.0.2,该怎么做? 问题答案: 可以通过以下方式(半伪代码)通过spring安全性完成此操作: 更新:仅包含注册后如何创建会话

  • 我已经创建了react应用程序,并使用下面提供的okta示例使用okta登录。 https://developer.okta.com/code/react/okta_react/#add-an-openid-connect-client-in-okta 我可以通过输入凭据并点击登录按钮成功地从我的应用程序登录到应用程序。 但是,如果我登录到okta开发帐户,然后如果我导航到我的应用程序,我的应用程

  • 1. 申请应用 1.1 创建第三方授权应用 登录 Facebook 开发者中心:Facebook 开发者中心 (opens new window) 进入“我的应用”管理页面 点击“添加新应用”,在弹窗中选择“用于其他用途” 按照提示,创建应用编号 在应用详情页面,选择“Facebook 登录” 配置“Facebook 登录”的回调地址 获取Client ID和Client Secret 点击左侧菜

  • 这是我的登录活动,我有一个按钮进入MainActivity,它已经包含导航抽屉了 这是我的主要活动 我已经更改了AndroidManifest,使LoginActivity成为默认的开始活动,但当我单击按钮时,它不会进入MainActivity。 这就是错误所在 E/AndroidRuntime:致命异常:主进程:com。重大进展myapplication22,PID:11422 java。lan

  • 问题内容: 我尝试了这个:当isSessionValid getDetails直接否则else facebook.authorize,然后在onActivityResult中获取getDetails 当我的系统上安装了Facebook应用程序时,此方法工作正常。但是,如果未安装,我将获得一个Web视图以输入facebook凭据,并在logcat中显示登录成功,但是没有调用getDetails块。