android - 如何使用带有 fragment 的 Firebase 电子邮件登录?

标签 android android-layout android-fragments

关于标题的问题。这是我的登录代码。当我这样使用时,我得到“无法解析方法 addOnCompleteListener...”。 Android Studio 通过转换到 Executor 来解决这个问题,但是当它转换时我得到异常“fragment 无法转换到 Executor”所以我不能转换 Executor。我该如何解决这个问题?

public class LoginFragment extends Fragment implements View.OnClickListener {

View v;
Button btnLogin;
TextView btnLostPw,btnRegister;
EditText txMail,txPass;


private FirebaseAuth mAuth;
private FirebaseUser mUser;

public LoginFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this
    v = inflater.inflate(R.layout.fragment_login, container, false);

     btnLogin = (Button) v.findViewById(R.id.login_btn_login);
     btnLostPw =(TextView) v.findViewById(R.id.login_btn_lost_pw);
     btnRegister=(TextView) v.findViewById(R.id.login_btn_register);
     txMail=(EditText)v.findViewById(R.id.login_email);
     txPass=(EditText)v.findViewById(R.id.login_pass);

    btnRegister.setOnClickListener(this);
    btnLostPw.setOnClickListener(this);
    btnLogin.setOnClickListener(this);

    mAuth = FirebaseAuth.getInstance();
    mUser = FirebaseAuth.getInstance().getCurrentUser();

    return v;
}

@Override
public void onClick(View v) {



    if(v.getId() == R.id.login_btn_lost_pw)
    {
        //Password Recovery
    }

    else if(v.getId() == R.id.login_btn_register)
    {
        //Register
    }
    else if(v.getId() == R.id.login_btn_login)
    {
        LoginUser(txMail.getText().toString(),txPass.getText().toString());
    }
}

private void LoginUser(String mail, final String password) {

    try {
    mAuth.signInWithEmailAndPassword(mail, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if(task.isSuccessful())
            {
                FragmentTransaction ft = getFragmentManager().beginTransaction();
                Fragment mFrag = new NextFragment();
                ft.replace(R.id.fragment_container, mFrag);
                ft.commit();
            }
            else {
                Snackbar.make(getActivity().findViewById(android.R.id.content),
                        task.getException().getLocalizedMessage(), Snackbar.LENGTH_LONG).show();
            }

        }
    });

}
catch (Exception ex)
{
    Snackbar.make(getActivity().findViewById(android.R.id.content),
            ex.getLocalizedMessage().toString(), Snackbar.LENGTH_LONG).show();
}

}

编辑:添加了类中的所有代码。

感谢 nivesh shastri 的帮助。 这里的工作代码:

 mAuth.signInWithEmailAndPassword(mail, password).addOnCompleteListener((Activity) getContext(), new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful())
                {
                    FragmentTransaction ft = getFragmentManager().beginTransaction();
                    Fragment mFrag = new NextFragment();
                    ft.replace(R.id.fragment_container, mFrag);
                    ft.commit();
                }
                else {
                    Snackbar.make(getActivity().findViewById(android.R.id.content),
                            task.getException().getLocalizedMessage(), Snackbar.LENGTH_LONG).show();
                }

        }
    });

最佳答案

试试这段代码:

private void LoginUser(String mail, final String password) {
 mAuth.createUserWithEmailAndPassword(mail, password).addOnCompleteListener(getContext(), new OnCompleteListener<AuthResult>() {
 @Override
public void onComplete(@NonNull Task<AuthResult> task) {
 if(task.isSuccessful())
 {
 // Do your task in success
 }
else {
 // Do your task in failure

 }
});

 }
 }

关于android - 如何使用带有 fragment 的 Firebase 电子邮件登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45686276/

相关文章:

android - gt-i7500 galaxy android 三星设备 usb 驱动程序

java - 在 Activity 之间传递数据

java - 展开高度的高度

安卓 : Draw Circle With Text Inside

java - 菜单选项卡不响应

java - fragment onCreate() 问题

android - 定期检查以太网连接android

android - 如何在 xml 数据绑定(bind)中使用 Singleton 类方法?

java - 如何将url图像加载到位图,将其转换为可绘制并使用imageview显示

java - 在 logcat 中查看日志中给出的字符串 - Android