Java Facebook登录loaduserprofile

Java Facebook登录loaduserprofile,java,facebook,authentication,Java,Facebook,Authentication,当我通过facebook登录时,我应该从facebook获取一些数据,比如我的电子邮件、姓名和个人资料图片。然而,在我添加了这些代码之后,现在我无法再获取数据了 @Override public void onSuccess(LoginResult loginResult) { final AccessToken accessToken = loginResult.getAccessToken(); Gra

当我通过facebook登录时,我应该从facebook获取一些数据,比如我的电子邮件、姓名和个人资料图片。然而,在我添加了这些代码之后,现在我无法再获取数据了

@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();
                    }
                }).executeAsync();


                Toast.makeText(getApplicationContext(), "Login Success with Facebook", Toast.LENGTH_SHORT).show();
                startActivity(new Intent(LoginScreen.this, MainActivity.class));

            }
我应该在这个活动中获取这些Facebook数据

package com.example.musix.Musix;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.example.musix.MainActivity;
import com.example.musix.R;
import com.facebook.AccessToken;
import com.facebook.AccessTokenTracker;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.google.firebase.auth.FirebaseAuth;

import org.json.JSONException;
import org.json.JSONObject;

public class ViewProfile extends AppCompatActivity {

    private ImageView circleImageView;
    private TextView txtName,txtEmail;

    private ImageButton Home;
    private ImageButton Playlist;

    private FirebaseAuth firebaseAuth;
    private Button logout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_profile);

        circleImageView = (ImageView) findViewById(R.id.profile_icon);
        txtName = findViewById(R.id.profile_name);
        txtEmail = findViewById(R.id.profile_email);

        Home = (ImageButton)findViewById(R.id.home);
        Playlist = (ImageButton)findViewById(R.id.playlisticon);

        firebaseAuth = FirebaseAuth.getInstance();

        logout = (Button)findViewById(R.id.btnLogout);

        //go to LoginScreen page
        logout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                firebaseAuth.signOut();
                startActivity(new Intent(ViewProfile.this, LoginScreen.class));
            }
        });
        //go to Playlist page
        Playlist.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(ViewProfile.this, Playlist.class));
            }
        });
        //go to MainActivity page
        Home.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(ViewProfile.this, MainActivity.class));
            }
        });

        checkLoginStatus();
    }

    AccessTokenTracker tokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
            if(currentAccessToken == null){
                txtName.setText("");
                txtEmail.setText("");
                circleImageView.setImageResource(0);
            }
            else{
                loaduserProfile(currentAccessToken);
            }
        }
    };

    //get Facebook profile data
    private void loaduserProfile(AccessToken newAccessToken){
        GraphRequest request = GraphRequest.newMeRequest(newAccessToken, new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(JSONObject object, GraphResponse response) {
                try {
                    String first_name = object.getString("first_name");
                    String last_name = object.getString("last_name");
                    String email = object.getString("email");
                    String id = object.getString("id");
                    String image_url = "https://graph.facebook.com/"+id+ "/picture?type=normal";

                    txtEmail.setText(email);
                    txtName.setText(first_name +" "+last_name);
                    RequestOptions requestOptions = new RequestOptions();
                    requestOptions.dontAnimate();

                    Glide.with(ViewProfile.this).load(image_url).into(circleImageView);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

        Bundle parameters = new Bundle();
        parameters.putString("fields", "first_name, last_name, email, id");
        request.setParameters(parameters);
        request.executeAsync();
    }

    //display Facebook profile data if already logged in
    private void checkLoginStatus(){
        if(AccessToken.getCurrentAccessToken()!= null){
            loaduserProfile(AccessToken.getCurrentAccessToken());
        }
    }
}

我的facebook登录页面


package com.example.musix.Musix;

import android.app.ProgressDialog;
import android.content.Intent;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.example.musix.MainActivity;
import com.example.musix.R;
import com.facebook.AccessToken;
import com.facebook.AccessTokenTracker;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.GraphRequest;
import com.facebook.GraphRequestAsyncTask;
import com.facebook.GraphResponse;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Arrays;

public class LoginScreen extends AppCompatActivity {

    private EditText Username;
    private EditText Password;
    private Button Login;
    private LoginButton FacebookLogin;
    private ImageView circleImageView;
    private TextView txtName,txtEmail;
    private TextView userRegistration;
    private FirebaseAuth firebaseAuth;
    private ProgressDialog progressDialog;
    private TextView forgotPassword;

    private CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login_screen);

        Username = (EditText) findViewById(R.id.etName);
        Password = (EditText) findViewById(R.id.etPassword);
        Login = (Button) findViewById(R.id.btnLogin);
        FacebookLogin = (LoginButton) findViewById(R.id.facebookLogin);
        txtName = findViewById(R.id.profile_name);
        txtEmail = findViewById(R.id.profile_email);
        circleImageView = (ImageView) findViewById(R.id.profile_icon);
        userRegistration = (TextView)findViewById(R.id.tvRegister);
        forgotPassword = (TextView)findViewById(R.id.tvForgotPassword);

        firebaseAuth = FirebaseAuth.getInstance();
        progressDialog = new ProgressDialog(this);

        FirebaseUser user = firebaseAuth.getCurrentUser();
        if(user != null){
            finish();
            startActivity(new Intent(LoginScreen.this, MainActivity.class));
        }

        Login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (((Username.length() > 0) && (Password.length() > 0)) ||(AccessToken.getCurrentAccessToken()!= null)){
                    validate(Username.getText().toString(), Password.getText().toString());
                }
                else if((Username.length() == 0) && (Password.length() > 0)){
                    Username.setError("Enter Username");
                }
                else if((Password.length() == 0) && (Username.length() > 0)){
                    Password.setError("Enter Password");
                }
                else{
                    Username.setError("Enter Username");
                    Password.setError("Enter Password");
                }
            }
        });
        userRegistration.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginScreen.this, SignUp.class));
            }
        });

        callbackManager = CallbackManager.Factory.create();
        FacebookLogin.setReadPermissions(Arrays.asList("email", "public_profile"));
        checkLoginStatus();

        FacebookLogin.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();
                    }
                }).executeAsync();


                Toast.makeText(getApplicationContext(), "Login Success with Facebook", Toast.LENGTH_SHORT).show();
                startActivity(new Intent(LoginScreen.this, MainActivity.class));

            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onError(FacebookException error) {
                Toast.makeText(getApplicationContext(), "Login Failed", Toast.LENGTH_SHORT).show();
            }
        });

        forgotPassword.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginScreen.this, ForgotPassword.class));
            }
        });
    }

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

    AccessTokenTracker tokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
            if(currentAccessToken == null){
                txtName.setText("");
                txtEmail.setText("");
                circleImageView.setImageResource(0);
            }
            else{
                loaduserProfile(currentAccessToken);
            }
        }
    };

    //get Facebook profile data
    private void loaduserProfile(AccessToken newAccessToken){
        GraphRequest request = GraphRequest.newMeRequest(newAccessToken, new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(JSONObject object, GraphResponse response) {
                try {
                    String first_name = object.getString("first_name");
                    String last_name = object.getString("last_name");
                    String email = object.getString("email");
                    String id = object.getString("id");
                    String image_url = "https://graph.facebook.com/"+id+ "/picture?type=normal";

                    txtEmail.setText(email);
                    txtName.setText(first_name +" "+last_name);
                    RequestOptions requestOptions = new RequestOptions();
                    requestOptions.dontAnimate();

                    Glide.with(LoginScreen.this).load(image_url).into(circleImageView);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

        Bundle parameters = new Bundle();
        parameters.putString("fields", "first_name, last_name, email, id");
        request.setParameters(parameters);
        request.executeAsync();
    }

    //display Facebook profile data if already logged in
    private void checkLoginStatus(){
        if(AccessToken.getCurrentAccessToken()!= null){
            loaduserProfile(AccessToken.getCurrentAccessToken());
        }
    }

    private void validate(String userUsername, String userPassword){
        //show login progress
        progressDialog.setMessage("Loading . . .");
        progressDialog.show();

        //Login admin account
        if((userUsername.equals("Admin")) && (userPassword.equals("12345"))){
            Intent intent = new Intent(LoginScreen.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
        //Login using firebase-registered accounts
        else{
            firebaseAuth.signInWithEmailAndPassword(userUsername,userPassword).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {

                    if(task.isComplete()){
                        progressDialog.dismiss();
                        Toast.makeText(LoginScreen.this, "Login Successful", Toast.LENGTH_SHORT).show();
                        startActivity(new Intent(LoginScreen.this, MainActivity.class));
                    }

                    else{
                        progressDialog.dismiss();
                        Toast.makeText(LoginScreen.this, "The username or password you entered is incorrect.", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    }
}

包com.example.musix.musix;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入androidx.annotation.NonNull;
导入androidx.annotation.Nullable;
导入androidx.appcompat.app.appcompat活动;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.bumptech.glide.glide;
导入com.bumptech.glide.request.RequestOptions;
导入com.example.musix.main活动;
导入com.example.musix.R;
导入com.facebook.AccessToken;
导入com.facebook.AccessTokenTracker;
导入com.facebook.CallbackManager;
导入com.facebook.facebook回调;
导入com.facebook.facebook异常;
导入com.facebook.GraphRequest;
导入com.facebook.GraphRequestAsyncTask;
导入com.facebook.GraphResponse;
导入com.facebook.login.LoginManager;
导入com.facebook.login.LoginResult;
导入com.facebook.login.widget.LoginButton;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.firebase.auth.AuthResult;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.auth.FirebaseUser;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.array;
公共类LoginScreen扩展了AppCompative活动{
私有文本用户名;
私有文本密码;
私人按钮登录;
私人登录按钮FacebookLogin;
私有图像视图circleImageView;
私有文本视图txtName,txtmail;
私有文本视图用户注册;
私有FirebaseAuth FirebaseAuth;
私有进程对话;
私有文本视图放弃密码;
私人CallbackManager CallbackManager;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u login\u屏幕);
用户名=(EditText)findViewById(R.id.etName);
密码=(EditText)findViewById(R.id.etPassword);
登录=(按钮)findViewById(R.id.btnLogin);
FacebookLogin=(LoginButton)findViewById(R.id.FacebookLogin);
txtName=findviewbyd(R.id.profile\u name);
txtEmail=findviewbyd(R.id.profile\u电子邮件);
circleImageView=(ImageView)findViewById(R.id.profile_图标);
userRegistration=(TextView)findViewById(R.id.tvRegister);
forgotPassword=(TextView)findViewById(R.id.tvForgotPassword);
firebaseAuth=firebaseAuth.getInstance();
progressDialog=新建progressDialog(此);
FirebaseUser=firebaseAuth.getCurrentUser();
如果(用户!=null){
完成();
startActivity(新意图(LoginScreen.this、MainActivity.class));
}
Login.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(((Username.length()>0)和&(Password.length()>0))| |(AccessToken.getCurrentAccessToken()!=null)){
验证(Username.getText().toString()、Password.getText().toString());
}
如果((Username.length()==0)和&(Password.length()>0))为else{
Username.setError(“输入用户名”);
}
如果((Password.length()==0)和&(Username.length()>0)){
密码设置错误(“输入密码”);
}
否则{
Username.setError(“输入用户名”);
密码设置错误(“输入密码”);
}
}
});
userRegistration.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
startActivity(新意图(LoginScreen.this、SignUp.class));
}
});
callbackManager=callbackManager.Factory.create();
FacebookLogin.setReadPermissions(Arrays.asList(“email”,“public_profile”));
checkLoginStatus();
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
final AccessToken AccessToken=loginResult.getAccessToken();
GraphRequestStatSyncTask请求=GraphRequest.NewMereRequest(accessToken,new GraphRequest.GraphJSONObjectCallback()){
@凌驾
未完成公共无效(JSONObject用户,GraphResponse GraphResponse){
LoginManager.getInstance().logOut();
}
}).executeAsync();
Toast.makeText(getApplicationContext(),“使用Facebook登录成功”,Toast.LENGTH_SHORT.show();
startActivity(新意图(LoginScreen.this、MainActivity.class));
}
@凌驾
公开作废{
}
@凌驾
public void onError(facebook异常错误){
Toast.makeText(getApplicationContext(),“登录失败”,Toast.LENGTH\u SHORT.show();
}
});
forgotPassword.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
startActivity(新意图(LoginScreen.this、ForgotPassword.class));
}
});
}
@凌驾
受保护的void onActivityResult(int-requestCode、int-resultCode、@Nullable-Intent-data){
callbackManager.onActivityResult(请求代码、结果代码、数据);
super.onActivityResult(请求代码、结果代码、数据);
}
@Override
                public void onCompleted(JSONObject user, GraphResponse graphResponse) {
                    LoginManager.getInstance().logOut();
                }
            }).executeAsync();
LoginManager.getInstance().logOut();