如何为onActivityResult

如何解决如何为onActivityResult

我有Facebook登录按钮和Google登录按钮。我正在跟踪有关如何集成Facebook登录的教程,并在onActivityResult中设置了开关大小写,但是Facebook按钮不起作用。我尝试的最后一件事,每个按钮的startForActivitResult()都无法使用。请帮忙

这是我的代码

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,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,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,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,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,data);
                break;

        }

    }

    private void signIn() {

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


}

activit_login.xml

<?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>

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res