关于标题的问题。在这里我的登录代码。当我像这样使用时,我得到了“无法解析方法addOnCompleteListener ....”。 Android工作室通过强制转移到Executor来解决这个问题,但是当它被强制转移时,我得到了异常“Fragment无法强制转移到Executor”,所以我无法强制执行Executor。我怎么解决这个问题 ?如何使用Firebase电子邮件登录一个片段?
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();
}
}
});
发表您的完整的类代码! –
已添加。感谢您的警告。 –
找到我的答案。 –