关于标题的问题。这是我的登录代码。当我这样使用时,我得到“无法解析方法 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/