java - 错误: Context cannot be converted to Executor

标签 java android android-studio android-fragments

我有 2 个使用相同 Activity 的 fragment 。单击按钮时,它们会在它们之间切换。我在 fragment 中使用 Google 的 Firebase 身份验证,但它在 signInWithEmailAndPassword 方法中给了我一个错误,它不接受我的上下文参数。

// Define the context
private Context mContext;

public LoginFragment() {

}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    this.mContext = context;
}

这是登录方法

// logs the user in
private void loginUser() {

    // Get the text for email and password
    String email = loginEmail.getText().toString();
    String password = loginPassword.getText().toString();

    // Sign the user in
    mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(mContext, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {

            // TODO: Figure out how to give back certain messages
            // If the task fails
            if(!task.isSuccessful()){
                Log.i(TAG, "Username/Passowrd Combination dont match");
            }
        }
    });

}

这是我得到的错误

Error:(115, 66) error: no suitable method found for addOnCompleteListener(Context,<anonymous OnCompleteListener<AuthResult>>)
method Task.addOnCompleteListener(Executor,OnCompleteListener<AuthResult>) is not applicable
(argument mismatch; Context cannot be converted to Executor)
method Task.addOnCompleteListener(Activity,OnCompleteListener<AuthResult>) is not applicable
(argument mismatch; Context cannot be converted to Activity)

我看过Android Fragment onAttach() deprecated之前它根本没有解决我的问题。我仍然收到错误。我的应用程序甚至无法启动

它正在使 mContext 进入正确的 Activity ,但 signInWithEmailAndPassword.addOnCompleteListener 不接受上下文,这就是错误所在

最佳答案

使用 getActivity() 更改 addOnCompleteListener 以使用该 fragment 所在的 Activity

// Sign the user in
mAuth.signInWithEmailAndPassword(email, password)
   .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {

        // TODO: Figure out how to give back certain messages
        // If the task fails
        if(!task.isSuccessful()){
            Log.i(TAG, "Username/Passowrd Combination dont match");
        }
    }
});

然后您可以删除所有 mContext 字段和 onAttach 覆盖

关于java - 错误: Context cannot be converted to Executor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42165959/

相关文章:

java - Mockito 匹配器 : matching a Class type in parameter list

Java 阻止 JComponent 的焦点

java - 单击按钮时发送自动短信

java - 如何在注册用户之前验证从 EditText 输入的电子邮件和密码

android - 这是即使在低内存压力下也能保持服务 Activity 的正确技巧吗?

安卓工作室 : Fail to parse SDK may be missing the directory add-ons

java - Eclipse PDE 中的日志记录策略

java - Android 倒计时,这是正确的方法吗?

maven - Android Studio - 找不到 intellij-core.jar

java - 用于 Fragment 的 AsyncTask 结果