Android studio 如何处理onActivityResult()的多个请求\u代码

Android studio 如何处理onActivityResult()的多个请求\u代码,android-studio,facebook-login,facebook-android-sdk,onactivityresult,startactivityforresult,Android Studio,Facebook Login,Facebook Android Sdk,Onactivityresult,Startactivityforresult,我有Facebook登录按钮和Google登录按钮。我正在学习一个关于如何集成facebook登录的教程,并在onActivityResult中创建了切换案例,但facebook按钮不起作用。我最后试过的一件事是,为每个按钮启动ForActivitResult(),但它也无法工作。请帮忙 这是我的密码 LoginActivity.java package com.gmail.restaurantsystemclient; import androidx.annotation.NonNu

我有Facebook登录按钮和Google登录按钮。我正在学习一个关于如何集成facebook登录的教程,并在onActivityResult中创建了切换案例,但facebook按钮不起作用。我最后试过的一件事是,为每个按钮启动ForActivitResult(),但它也无法工作。请帮忙

这是我的密码

LoginActivity.java

    package com.gmail.restaurantsystemclient;

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

import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.media.Image;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.StyleSpan;
import android.util.Log;
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.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.FacebookSdk;
import com.facebook.appevents.AppEventsLogger;
import com.facebook.login.widget.LoginButton;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FacebookAuthProvider;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
import com.squareup.picasso.Picasso;

//import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
//import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
//import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;

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

import java.net.MalformedURLException;
import java.net.URL;
import java.text.BreakIterator;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

import static android.widget.Toast.*;

public class LoginActivity extends AppCompatActivity {

    private LoginButton nFbBtn;
    private ImageButton nGooBtn;
    private TextInputEditText nEmailInput;
    private TextInputEditText nPasswordInput;
    private TextView nCreateAccountBtn;
    private TextView ntxt;

    //Firebase
    private FirebaseAuth mAuth;

    //Google
    private GoogleSignInClient mGoogleSignInClient;
    private GoogleSignInAccount googleSignInAccount;
    final private static int GO_RC_SIGN_IN = 0;

    // Facebook
    private CallbackManager callbackManager;
    private LoginManager loginManager;
    private AccessToken accessToken;
    private GraphRequest graphRequest;
    private LoginResult loginResult;
    final private static int FB_RC_SIGN_IN = 2;

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

        /* - - - - - INITIALIZATION - - - - - */
        // Facebook
        FacebookSdk.sdkInitialize(LoginActivity.this); // FB SDK
        callbackManager = CallbackManager.Factory.create();
        // Firebase
        mAuth = FirebaseAuth.getInstance();
        // Image
        //ImageView nLogoImgView = findViewById(R.id.logoImgView);
        // Inputs
        nEmailInput = findViewById(R.id.emailEditTxt);
        nPasswordInput = findViewById(R.id.nPasswordEditTxt);
        // Buttons
        nCreateAccountBtn = findViewById(R.id.createAccountBtn);
        nGooBtn = findViewById(R.id.gooBtn);
        nFbBtn = findViewById(R.id.fbBtn);
        // TextViews
        ntxt = findViewById(R.id.txt);

        //nLogoImgView.setImageResource(R.drawable.ic_logo_01);

        whenLoginBtnClicked();
        //nCreateAccountBtn.setText(Objects.requireNonNull(mAuth.getCurrentUser()).getIdToken(true).toString());
        //whenCreateAccountTextIsClicked();

        whenUserSignInWithGoogle();

        // Initialize Facebook Login button
        callbackManager = CallbackManager.Factory.create();

        nFbBtn.setReadPermissions("email", "public_profile");
        nFbBtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Intent fb = new Intent();
                startActivityForResult(fb,FB_RC_SIGN_IN);
                //Log.d("LoginActivity.this", "facebook:onSuccess:" + loginResult);
                handleFacebookAccessToken(loginResult.getAccessToken());
                Toast.makeText(LoginActivity.this, "success",
                        LENGTH_SHORT).show();
            }

            @Override
            public void onCancel() {
                Toast.makeText(LoginActivity.this, "cancel",
                        LENGTH_SHORT).show();

            }

            @Override
            public void onError(FacebookException error) {
                Toast.makeText(LoginActivity.this, "error",
                        LENGTH_SHORT).show();

            }
        });


    }

    private void handleFacebookAccessToken(AccessToken token) {
        //Log.d("TAG", "handleFacebookAccessToken:" + token);

        AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            //Log.d("TAG", "signInWithCredential:success");
                            Toast.makeText(LoginActivity.this, "Authentication success",
                                    LENGTH_LONG).show();
                            FirebaseUser user = mAuth.getCurrentUser();
                            updateUI(user);
                        } else {
                            // If sign in fails, display a message to the user.
                            //Log.w("TAG", "signInWithCredential:failure", task.getException());
                            Toast.makeText(LoginActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                            updateUI(null);
                        }


                    }
                });
    }


    private void whenUserSignInWithGoogle() {

        nGooBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent goo = new Intent();
                startActivityForResult(goo,GO_RC_SIGN_IN);
                // Configure sign-in to request the user's ID, email address, and basic
                // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
                GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestIdToken(getString(R.string.default_web_client_id))
                        .requestEmail()
                        .build();

                // Build a GoogleSignInClient with the options specified by gso.
                mGoogleSignInClient = GoogleSignIn.getClient(LoginActivity.this, gso);

                // Check for existing Google Sign In account, if the user is already signed in
                // the GoogleSignInAccount will be non-null.
                googleSignInAccount = GoogleSignIn.getLastSignedInAccount(LoginActivity.this);
                updateUIGoogleSignIn(googleSignInAccount);
                signIn();

            }

        });

    }


    private void whenLoginBtnClicked() {

        Button nLoginBtn = findViewById(R.id.loginBtn);
        nLoginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String email = String.valueOf(nEmailInput.getText());
                String password = String.valueOf(nPasswordInput.getText());
               loginUser(email, password);
            }
        });

    }

    private void whenCreateAccountTextIsClicked() {

        final SpannableStringBuilder sb = new SpannableStringBuilder(nCreateAccountBtn.getText());
        final StyleSpan bss = new StyleSpan(Typeface.BOLD);
        sb.setSpan(bss, 5, 22, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        nCreateAccountBtn.setText(sb);
        nCreateAccountBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
                startActivity(registerIntent);
            }
        });

    }

    private void loginUser(String email, String password) {

        mAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information

                            FirebaseUser user = mAuth.getCurrentUser();
                            updateUI(user);
                        } else {
                            // If sign in fails, display a message to the user.
                            makeText(LoginActivity.this, "Authentication failed.",
                                    LENGTH_SHORT).show();
                            updateUI(null);
                        }

                        // ...
                    }
                });

    }

    private void updateUI(FirebaseUser user) {

        if(user != null)
        {
            // check for the user in the database
        }
        else
        {

        }
    }

    private void updateUIGoogleSignIn(GoogleSignInAccount account) {

        if(account != null)
        {
            // check for the user in the database
            Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class);
            startActivity(mainIntent);
        }
        else
        {
            Toast.makeText(this, "a toast message in updateUIGoogleSignIn", LENGTH_LONG).show();
        }
    }


    private void firebaseAuthWithGoogle(String idToken) {
        AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null);
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            //Log.d(TAG, "signInWithCredential:success");
                            //FirebaseUser user = mAuth.getCurrentUser();
                            //updateUI(user);
                        } else {
                            // If sign in fails, display a message to the user.
                            //Log.w(TAG, "signInWithCredential:failure", task.getException());
                            //Snackbar.make(mBinding.mainLayout, "Authentication Failed.", Snackbar.LENGTH_SHORT).show();
                            //updateUI(null);
                        }

                        // ...
                    }
                });
    }

    private void handleSignInResult(Task<GoogleSignInAccount> completedTask)
    {

        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
            String idToken = account.getIdToken();

            // Send Id Token to the backend and validate here


            // Signed in successfully, show authenticated UI.
            updateUIGoogleSignIn(account);
        } catch (ApiException e) {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            //Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
            updateUI(null);
        }

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode)
        {
            case GO_RC_SIGN_IN:
                // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
                if (requestCode == GO_RC_SIGN_IN) {
                    Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
                    if (task.isSuccessful())
                    {
                        try {

                            // Google Sign In was successful, authenticate with Firebase
                            GoogleSignInAccount account = task.getResult(ApiException.class);
                            //Log.d(TAG, "firebaseAuthWithGoogle:" + account.getId());
                            firebaseAuthWithGoogle(Objects.requireNonNull(account).getIdToken());
                        } catch (ApiException e) {
                            // Google Sign In failed, update UI appropriately
                            //Log.w(TAG, "Google sign in failed", e);
                            // ...
                        }
                    }
                    else
                    {

                    }

                }
                break;
            case FB_RC_SIGN_IN:
                callbackManager.onActivityResult(requestCode, resultCode, data);
                break;

        }

    }

    private void signIn() {

        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, GO_RC_SIGN_IN);
    }


}
package com.gmail.restaurantsystemclient;
导入androidx.annotation.NonNull;
导入androidx.appcompat.app.appcompat活动;
导入android.app.Activity;
导入android.content.Intent;
导入android.graphics.Typeface;
导入android.graphics.drawable.drawable;
导入android.media.Image;
导入android.os.Bundle;
导入android.text.Spannable;
导入android.text.SpannableStringBuilder;
导入android.text.TextUtils;
导入android.text.style.StyleSpan;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageButton;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.facebook.AccessToken;
导入com.facebook.CallbackManager;
导入com.facebook.facebook回调;
导入com.facebook.facebook异常;
导入com.facebook.FacebookSdk;
导入com.facebook.GraphRequest;
导入com.facebook.GraphResponse;
导入com.facebook.login.LoginManager;
导入com.facebook.login.LoginResult;
导入com.facebook.FacebookSdk;
导入com.facebook.appevents.AppEventsLogger;
导入com.facebook.login.widget.LoginButton;
导入com.google.android.gms.auth.api.signin.GoogleSignIn;
导入com.google.android.gms.auth.api.signin.GoogleSignInAccount;
导入com.google.android.gms.auth.api.signin.GoogleSignInClient;
导入com.google.android.gms.auth.api.signin.GoogleSignInOptions;
导入com.google.android.gms.common.api.ApiException;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.android.material.snackbar.snackbar;
导入com.google.android.material.textfield.textinputtext;
导入com.google.firebase.auth.AuthCredential;
导入com.google.firebase.auth.AuthResult;
导入com.google.firebase.auth.FacebookAuthProvider;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.auth.FirebaseUser;
导入com.google.firebase.auth.GoogleAuthProvider;
导入com.squareup.picasso.picasso;
//导入com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
//导入com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
//导入com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.text.BreakIterator;
导入java.util.array;
导入java.util.List;
导入java.util.Objects;
导入静态android.widget.Toast.*;
公共类LoginActivity扩展了AppCompatActivity{
私人登录按钮nFbBtn;
私人图像按钮;
私有文本输入文本输入;
私有文本输入文本nPasswordInput;
私有文本视图nCreateAccountBtn;
私有文本视图ntxt;
//火基
私人消防队;
//谷歌
私人谷歌签名客户端mGoogleSignInClient;
私人谷歌签名账号谷歌签名账号;
最终私有静态int GO\u RC\u SIGN\u IN=0;
//脸谱网
私人CallbackManager CallbackManager;
私有LoginManager LoginManager;
专用AccessToken AccessToken;
私人攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬;
私人登录结果登录结果;
最终专用静态int FB_RC_SIGN_IN=2;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
/*------初始化----*/
//脸谱网
FacebookSdk.sdkinInitialize(LoginActivity.this);//FB SDK
callbackManager=callbackManager.Factory.create();
//火基
mAuth=FirebaseAuth.getInstance();
//形象
//ImageView nlogioimgView=findViewById(R.id.logoImgView);
//投入
nEmailInput=findViewById(R.id.emailEditTxt);
nPasswordInput=findviewbyd(R.id.nPasswordEditTxt);
//钮扣
nCreateAccountBtn=findViewById(R.id.createAccountBtn);
nGooBtn=findViewById(R.id.gooBtn);
nFbBtn=findViewById(R.id.fbBtn);
//文本视图
ntxt=findviewbyd(R.id.txt);
//nLogoImgView.setImageResource(R.drawable.ic_徽标_01);
当登录时取消勾选();
//nCreateAccountBtn.setText(Objects.requireNonNull(mAuth.getCurrentUser()).getIdToken(true.toString());
//WhenCreateCountTextIsClicked();
当使用Google()进行识别时;
//初始化Facebook登录按钮
callbackManager=callbackManager.Factory.create();
nFbBtn.setReadPermissions(“电子邮件”、“公共档案”);
nFbBtn.registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
意图fb=新意图();
startActivityForResult(fb、fb\u RC\u登录);
//Log.d(“LoginActivity.this”,“facebook:onSuccess:+loginResult”);
handleFacebookAccessToken(loginResult.getAccessToken());
Toast.makeText(LoginActivity.this,“success”,
长度(短)。显示();
}
@凌驾
公开作废{
Toast.makeText(LoginActivity.this,“取消”,
长度(短)。显示();
}
@凌驾
public void onError(facebook异常错误){
Toast.makeText(LoginActivity.this,“错误”,
长度(短)。显示();
}
});
}
私有无效handleFacebookAccessToken(AccessToken令牌){
//日志d(“标签”、“手柄”
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".LoginActivity">

    <ImageView
        android:id="@+id/logoImgView"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:layout_marginTop="50dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_logo_01" />

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/emailEditLayout"
        android:layout_width="@dimen/login_reg_text_edit_width"
        android:layout_height="wrap_content"
        android:layout_marginStart="1dp"
        android:layout_marginTop="50dp"
        android:layout_marginEnd="1dp"
        android:background="@drawable/edit_text_backgroung"
        android:elevation="@dimen/elevation"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/logoImgView">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/emailEditTxt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="@string/hint_email"
            android:paddingHorizontal="20dp" />
    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/passwordEditLayout"
        android:layout_width="@dimen/login_reg_text_edit_width"
        android:layout_height="wrap_content"
        android:layout_marginStart="1dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="1dp"
        android:background="@drawable/edit_text_backgroung"
        android:elevation="@dimen/elevation"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/emailEditLayout">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/nPasswordEditTxt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="@string/hint_password"
            android:paddingHorizontal="20dp" />
    </com.google.android.material.textfield.TextInputLayout>


    <Button
        android:id="@+id/loginBtn"
        android:layout_width="@dimen/login_reg_btn_width"
        android:layout_height="wrap_content"
        android:layout_marginTop="80dp"
        android:background="@drawable/login_btn"
        android:text="@string/login"
        android:textColor="@color/white"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/passwordEditLayout" />

    <TextView
        android:id="@+id/createAccountBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="105dp"
        android:layout_marginTop="35dp"
        android:layout_marginEnd="128dp"
        android:text="@string/new_create_an_account"
        android:textColor="@color/colorAccent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/loginBtn" />

    <TextView
        android:id="@+id/txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="1dp"
        android:layout_marginTop="40dp"
        android:layout_marginEnd="1dp"
        android:text="@string/or_continue_with"
        android:textColor="@color/colorPrimary"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/createAccountBtn" />

    <com.facebook.login.widget.LoginButton
        android:id="@+id/fbBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:layout_marginEnd="130dp"

        android:elevation="@dimen/elevation"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txt" />


    <ImageButton
        android:id="@+id/gooBtn"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginStart="130dp"
        android:layout_marginTop="30dp"
        android:background="@drawable/google_signin_btn"
        android:elevation="@dimen/elevation"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txt"
        app:srcCompat="@drawable/ic_google_icon" />

</androidx.constraintlayout.widget.ConstraintLayout>