首页 > 解决方案 > 我的应用程序在工作登录方法后关闭

问题描述

我在我的应用程序中编辑了一个带有片段的登录页面,如下所示:

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)

在我的应用程序中,当任务成功时,应用程序正在关闭,并且在我再次启动应用程序后,我可以输入配置文件片段。当任务不成功时,我的应用程序也会关闭。我找不到关闭我的应用程序的错误。你能帮忙吗?

标签: androidandroid-fragments

解决方案


错误是在调用片段时,你使用这个

//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(); 

推荐阅读