2017-08-15 46 views
1

关于标题的问题。在这里我的登录代码。当我像这样使用时,我得到了“无法解析方法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(); 
       } 

     } 
    }); 
+0

发表您的完整的类代码! –

+0

已添加。感谢您的警告。 –

+0

找到我的答案。 –

回答

1

试试这个代码:

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 

} 
}); 

} 
} 
+0

非常感谢您解决我的问题。 –

0

我已经使用了一个片段createUserWithEmailPassword完整听众

概述内:注册活动 - >提交按钮 - > createUserWithEmailPassword oncompleteListener - >任务成功 - >片段称为

请参考以下代码:

if(task.isSuccessful()) 
      { 
       //Verify Email Dialog 
        FragmentManager fragmentManager = getSupportFragmentManager();        
        VerifyEmailDialogFragment verifyFragment = new VerifyEmailDialogFragment(); 
        verifyFragment.show(fragmentManager, "Verify Email Dialog"); 
      } 

说明:这里VerifyEmailDialogFragment是创建用户的任务成功时调用的对话框片段。

我希望这是你在找什么!

+0

我认为这是一个活动,但我正在做一个片段。所有添加的类代码都可以再次检查吗? –

+0

由于片段事务给出错误,请尝试使用我提到的方法调用片段。让我知道它是否仍然无效。 –

+0

我想你是指在一个活动中使用它,然后调用片段。我尝试过,但应用程序崩溃时,我尝试登录。 –

相关问题