android - 错误的第一个参数类型:发现需要类 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;
解决方案
如果你想使用 enableAutoManage 那么你必须让你的活动扩展 FragmentActivity。它进行的回调是 GoogleApiClient 的自动管理工作所必需的。因此,最简单的解决方案是将 extends FragmentActivity 添加到您的活动中。然后你的演员就不会失败并导致应用程序在运行时崩溃。
推荐阅读
- selenium - 我们真的使用 TestNG 并行运行模式来执行 Web 测试吗?
- google-app-engine - deploy go api 不发送任何响应
- javascript - javascript (ES6):为什么我们需要集合?
- bootstrap-4 - 使用按钮设置表单值 (Bootstrap/Bootstrap Studio)
- reactjs - 有条件地在 React 中围绕 div 渲染锚链接
- javascript - 无法访问 .beforeEach() 中的 Buefy 组件
- javascript - 如何使用正则表达式检查单词是否有括号
- reactjs - React 开发服务器不代理表单提交
- uwp - HTTP POST 请求 - 页面完成后如何传递参数
- tensorflow - 使用 colocate_gradients_with_ops=True 在 Keras 中自定义优化器的正确方法是什么?