首页 > 解决方案 > 错误的第一个参数类型:发现需要类 X 'androidx.fragment.app.FragmentActivity'

问题描述

传递上下文时在 enableAutoManage 方法中出现错误基本上我正在使用 Firebase 对用户进行身份验证,但运行我自己的 api 来存储用户的信息

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

    sharedPreferenceManager = new SharedPreferenceManager(context);

    initialize();

    String first = getResources().getString(R.string.by_continuing_terms);
    String second = getResources().getString(R.string.terms_n_condition);
    terms_and_conditions.setText(Html.fromHtml(first + second));

    //Remove Text from Google's Sign In Button
    TextView textView = (TextView) google.getChildAt(0);
    textView.setText(BLANK);

    callbackManager = CallbackManager.Factory.create();
    skipLoginHandler();
    nextClickHandler();

    progressDialog = new ProgressDialog(LoginActivity.this);
    progressDialog.setTitle(getResources().getString(R.string.authenticating));
    progressDialog.setMessage(getResources().getString(R.string.please_wait_while_we_check_your_credentials));
    progressDialog.setCanceledOnTouchOutside(false);

    mAuth = FirebaseAuth.getInstance();

    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            firebaseUser = firebaseAuth.getCurrentUser();
        }
    };

    google.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "Google button is tapped", Toast.LENGTH_SHORT).show();
            Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
            startActivityForResult(signInIntent, RC_SIGN_IN);
        }
    });

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build();

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(LoginActivity.this,
            new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                    Toast.makeText(context, getResources().getString(R.string.google_play_services_error), Toast.LENGTH_LONG).show();
                }
            })
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();
}


   @Override
    protected void onPause() {
        super.onPause();
        if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
            mGoogleApiClient.stopAutoManage(LoginActivity.this);
            mGoogleApiClient.disconnect();
        }
    }
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RC_SIGN_IN) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            if (result.isSuccess()) {
                GoogleSignInAccount account = result.getSignInAccount();
                sharedPreferenceManager.addDetailToSharedPreferences(GOOGLE_ID_TOKEN, account != null ? account.getIdToken() : BLANK);
                if(account != null) {
                    firebaseAuthWithGoogle(account);
                } else {
                    System.out.println("Account is NULL!!");
                }
            } else {
                System.out.println("Google Login Unsuccessful!!");
            }
        }
    }

   private void firebaseAuthWithGoogle(GoogleSignInAccount googleSignInAccount) {
        AuthCredential credential = GoogleAuthProvider.getCredential(googleSignInAccount.getIdToken(), null);
        mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {

调用该方法注册用户 registerOrLoginUsingGoogle(); } else { Toast.makeText(context, getResources().getString(R.string.google_signin_failed), Toast.LENGTH_SHORT).show(); } } }); 我 为此活动的导入

    import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.Html;
import android.text.TextWatcher;
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 android.util.Log;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.ango.DueDateActivity;
import com.ango.HealthFeedsActivityNew;
import com.ango.MotherOrFather;
import com.ango.MotherOrFatherDetails;
import com.ango.R;
import com.ango.global.AngoConfigurations;
import com.ango.global.SharedPreferenceManager;
import com.ango.helper.Constants;
import com.ango.helper.PatientDetailsHelper;
import com.ango.helper.RequestQueueSingleton;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
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.hbb20.CountryCodePicker;

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

import java.util.regex.Matcher;
import java.util.regex.Pattern;

标签: androidandroid-studioandroid-activitygoogle-signingoogle-client

解决方案


如果你想使用 enableAutoManage 那么你必须让你的活动扩展 FragmentActivity。它进行的回调是 GoogleApiClient 的自动管理工作所必需的。因此,最简单的解决方案是将 extends FragmentActivity 添加到您的活动中。然后你的演员就不会失败并导致应用程序在运行时崩溃。


推荐阅读