android - 我的应用程序在工作登录方法后关闭
问题描述
我在我的应用程序中编辑了一个带有片段的登录页面,如下所示:
public class LoginFragment extends Fragment {
private EditText editTextUserName;
private EditText editTextUserPassword;
private Button buttonLogin;
private TextView txtRegister;
private FirebaseAuth mAuth;
private FirebaseUser firebaseUser;
private String userName;
private String userPassword;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_login, container, false);
editTextUserName = view.findViewById(R.id.editTextUserName);
editTextUserPassword = view.findViewById(R.id.editTextUserPassword);
buttonLogin = view.findViewById(R.id.buttonLogin);
txtRegister = view.findViewById(R.id.txtRegister);
mAuth = FirebaseAuth.getInstance();
firebaseUser = mAuth.getCurrentUser(); // authenticated user
if(firebaseUser != null){ // check user session
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ProfileFragment()).commit();
}
buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
userName = editTextUserName.getText().toString();
userPassword = editTextUserPassword.getText().toString();
if(userName.isEmpty() || userPassword.isEmpty()){
Toast.makeText(getActivity().getApplicationContext(),"Lütfen gerekli alanları doldurunuz!",Toast.LENGTH_SHORT).show();
}else{
loginFunc();
}
}
});
txtRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new RegisterFragment()).commit();
}
});
return view;
}
private void loginFunc() {
mAuth.signInWithEmailAndPassword(userName,userPassword).addOnCompleteListener((Executor) LoginFragment.this,
new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ProfileFragment()).commit();
}
else{
// hata
Toast.makeText(getActivity().getApplicationContext(),task.getException().getMessage(),Toast.LENGTH_SHORT).show();
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new HomeFragment()).commit();
}
}
});
}
在我的 MainActivity 我这样调用 LoginFragment :
private Toolbar.OnMenuItemClickListener toolbarListener= new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.action_profil:
//Intent intent = new Intent(MainActivity.this,RegisterActivity.class);
//startActivity(intent);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new LoginFragment()).commit();
break;
}
return true;
}
};
在 logcat 我有这个消息:
06-09 11:24:30.416 20619-20619/com.kaydeniz.ihaleajandasi2 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.kaydeniz.ihaleajandasi2, PID: 20619 java.lang.ClassCastException: com.kaydeniz.ihaleajandasi2.LoginFragment cannot be cast to java.util.concurrent.Executor at com.kaydeniz.ihaleajandasi2.LoginFragment.loginFunc(LoginFragment.java:88) at com.kaydeniz.ihaleajandasi2.LoginFragment.access$400(LoginFragment.java:25) at com.kaydeniz.ihaleajandasi2.LoginFragment$1.onClick(LoginFragment.java:69) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
在我的应用程序中,当任务成功时,应用程序正在关闭,并且在我再次启动应用程序后,我可以输入配置文件片段。当任务不成功时,我的应用程序也会关闭。我找不到关闭我的应用程序的错误。你能帮忙吗?
解决方案
错误是在调用片段时,你使用这个
//on Success
final FragmentTransaction ft = getActivity.getFragmentManager().beginTransaction();
ft.replace(R.id. fragment_container, new ProfileFragment(), "ProfileFragment");
ft.commit();
//on failed
final FragmentTransaction ft = getActivity.getFragmentManager().beginTransaction();
ft.replace(R.id. fragment_container, new HomeFragment(), "HomeFragment");
ft.commit();
推荐阅读
- c# - 对 params dynamic[] 的内容求和时出错
- c - 是否可以在 Mac 上编译可在 Windows 上编译的 c 程序?
- tsql - Crystal Reports:If/Else 公式给出错误结果
- ios - pow 使用带负指数的 Double 或 Decimal 返回不同的结果
- javascript - 如何让我的删除按钮从数据库中删除数据?
- arrays - Matlab中的N维数组索引:在中间查找数组
- python - Pymongo:如果已经存在则返回 MongoClient
- python - 尝试导入 gspread 时没有名为“gspread”的模块
- c# - 反序列化一个复杂的json对象c#
- react-native - 如何防止 react-navigation 在 StackAction.reset 期间显示过渡动画?