I created an onclick condition to login, when I run the application it exits itself and raises an error, I suspect the error is in the following code section
Intent intent = new Intent(context, MainActivity.class);
startActivity(intent);
getActivity().finish();
how to make the code executable?
The error :
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.abiapp.androidukk, PID: 28347
java.lang.IllegalStateException: Fragment LoginFragment{4981b94} (f7c99ef6-7be5-4ff5-9105-180cd015a38f) not attached to Activity
at androidx.fragment.app.Fragment.startActivity(Fragment.java:1443)
at androidx.fragment.app.Fragment.startActivity(Fragment.java:1433)
at com.abiapp.androidukk.ui.login.LoginFragment.onLoginSuccess(LoginFragment.java:89)
at com.abiapp.androidukk.helper.Helper$4.onResponse(Helper.java:94)
at com.abiapp.androidukk.helper.Helper$4.onResponse(Helper.java:74)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:82)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:29)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:257)
at android.app.ActivityThread.main(ActivityThread.java:8218)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)
Here is my LoginFragment, in code Helper.loginUser(getContext(),username,password); I also included getContext() because if I didn't include getContext(), the method that uses getContext() in the LoginFragment class will be null.
I suspect for MainActivity.class to have the same case, but I don't know how to fix it
The LoginFragment class :
public class LoginFragment extends Fragment {
private FragmentLoginBinding binding;
private EditText usernameEditText,passwordEditText;
private MainActivity mainActivity;
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_login,container,false);
Button button = view.findViewById(R.id.btnSubmit);
usernameEditText = view.findViewById(R.id.edit_textUsername);
passwordEditText = view.findViewById(R.id.edit_textPassword);
// menambahkan event setOnClickListener() pada tombol btnSubmit
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// memanggil method untuk login
String username = usernameEditText.getText().toString().trim();
String password = passwordEditText.getText().toString().trim();
if (mainActivity != null){
System.out.println("ada kok");
}
Helper.loginUser(getContext(),username,password);
}
});
return view;
}
public void onLoginSuccess(Context context, String nik, String nama, String username, String password, String telp, String sessionId) {
// Login berhasil, simpan data user ke shared preferences
if (context != null){
System.out.println("ada kok 4");
}
SharedPreferences sharedPref = context.getSharedPreferences("USER_DATA", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("nik", nik);
editor.putString("nama", nama);
editor.putString("username", username);
editor.putString("password", password);
editor.putString("telp", telp);
editor.putString("session_id", sessionId);
editor.apply();
// Tampilkan pesan sukses dan pindah ke halaman berikutnya
Toast.makeText(context, "Login berhasil", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context, StartActivity.class);
startActivity(intent);
getActivity().finish();
}
public void onLoginFailed(Context context, String message) {
// Login gagal, tampilkan pesan error
Toast.makeText(context, "Login gagal: " + message, Toast.LENGTH_SHORT).show();
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
I've tried a few things and also asked the AI, but it still doesn't work