0

I can not speak English well. But I will try my best. A NullPointerException occurred while writing the code. I want to create a dialog when the imageButton is pressed, and a Toast when the button in the dialog is pressed. But my code throws NullPointerException. I don't know why a NullpointerException occurs even though dialogFragment is passed as a parameter. Below is the code I wrote. Any help would be appreciated.

MainActivity.java

public class MainActivity extends AppCompatActivity {

ImageButton Button_MainActivity_Borrow;
FragmentManager fm;
CustomAlertWindowPenalty   cawp;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button_MainActivity_Borrow = findViewById(R.id.Button_MainActivity_Borrow);
    fm = getSupportFragmentManager();
    cawp = new CustomAlertWindowPenalty(borrowListener);
    BorrowORreturnListener listener = new BorrowORreturnListener(cawp);

    Button_MainActivity_Borrow.setOnClickListener(listener);


}

View.OnClickListener borrowListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Toast.makeText(MainActivity.this, "Toast", Toast.LENGTH_SHORT).show();
    }
};

public class CustomAlertWindowPenalty extends DialogFragment {
    private View.OnClickListener buttonClickListener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public CustomAlertWindowPenalty(View.OnClickListener clickListener) {
        buttonClickListener = clickListener;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = new Dialog(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.custom_alert_window_penalty, null);

        Button button_cawp_Yes = view.findViewById(R.id.button_cawp_Yes);
        button_cawp_Yes.setOnClickListener(buttonClickListener);

        dialog.setContentView(view);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.setCanceledOnTouchOutside(false);

        return dialog;
    }

    @Override
    public void onResume() {
        super.onResume();

        getDialog().getWindow().setLayout(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT);
    }
}

private class BorrowORreturnListener implements View.OnClickListener{

    CustomAlertWindowPenalty cawp;

    public BorrowORreturnListener(CustomAlertWindowPenalty cawp) {
        this.cawp = cawp;
    }

    @Override
    public void onClick(View view) {
        cawp.show(fm,"");*this is error*
    }
}

}

This is Logcat error

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.myapplication2.MainActivity$CustomAlertWindowPenalty.show(androidx.fragment.app.FragmentManager, java.lang.String)' on a null object reference
    at com.example.myapplication2.MainActivity$BorrowORreturnListener.onClick(MainActivity.java:101)
    at android.view.View.performClick(View.java:6274)
    at android.view.View$PerformClick.run(View.java:24859)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6710)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)
jdhjdh
  • 3
  • 2

0 Answers0