-3

Im having this error :

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                                           at mt.edu.mcast.navigationfragmentsexample.BlankFragment2.onCreateView(BlankFragment2.java:92)

This is the code in the java BlankFragment2:

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_blank_fragment2,container,false);
    final EditText etName = (EditText) this.getActivity().findViewById(R.id.etName);
    final EditText etSurname = (EditText) this.getActivity().findViewById(R.id.etSurname);
    final EditText etUsername = (EditText) this.getActivity().findViewById(R.id.etUsername);
    final EditText etPassword = (EditText) this.getActivity().findViewById(R.id.etPassword);
    final EditText etEmail = (EditText) this.getActivity().findViewById(R.id.etEmail);
    final EditText etPhone = (EditText) this.getActivity().findViewById(R.id.etPhone);
    final EditText etAge = (EditText) this.getActivity().findViewById(R.id.etAge);
    final Button bRegister = (Button) this.getActivity().findViewById(R.id.bRegister);

At this point error v

   bRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final String name = etName.getText().toString();
            final String surname = etSurname.getText().toString();
            final String username = etUsername.getText().toString();
            final String password = etPassword.getText().toString();
            final String email = etEmail.getText().toString();
            final int phone = Integer.parseInt(etPhone.getText().toString());
            final int age = Integer.parseInt(etAge.getText().toString());

            Response.Listener<String> responseListener = new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject jsonResponse = new JSONObject(response);
                        boolean success = jsonResponse.getBoolean("success");
                        if(success){
                            Intent intent = new Intent(getActivity(), BlankFragment1.class);
                            BlankFragment2.this.startActivity(intent);
                        }
                        else {
                            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); //create an error message
                            builder.setMessage("Register Failed")
                                    .setNegativeButton("Retry",null) //click retry to retry registration
                                    .create()
                                    .show();
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }


                }
            };
            RegisterRequest registerRequest = new RegisterRequest(name, surname,age,username,password,email,phone,responseListener);
            RequestQueue queue = Volley.newRequestQueue(getActivity());
            queue.add(registerRequest);
        }
    });
    return view;
}

Any Help?

Niranj Patel
  • 35,286
  • 11
  • 96
  • 128

3 Answers3

1

You are finding views in your activity, but you need to find in the View you just inflated for your fragment. For all your findViewById calls, change this.getActivity() into view, so it will be view.findViewById

0xDEADC0DE
  • 2,373
  • 1
  • 15
  • 21
1

You should find the view from the rootView/Inflated view not from the getActivity(). So change this.getActivity() into view.

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_blank_fragment2,container,false);
final EditText etName = (EditText) view.findViewById(R.id.etName);
final EditText etSurname = (EditText) view.findViewById(R.id.etSurname);
final EditText etUsername = (EditText) view.findViewById(R.id.etUsername);
final EditText etPassword = (EditText) view.findViewById(R.id.etPassword);
final EditText etEmail = (EditText) view.findViewById(R.id.etEmail);
final EditText etPhone = (EditText) view.findViewById(R.id.etPhone);
final EditText etAge = (EditText) view.findViewById(R.id.etAge);
final Button bRegister = (Button) view.findViewById(R.id.bRegister);
}
Saritha G
  • 2,365
  • 1
  • 13
  • 25
0

Try this -

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_blank_fragment2,container,false);
    final EditText etName = (EditText) view.findViewById(R.id.etName);
    final EditText etSurname = (EditText) view.findViewById(R.id.etSurname);
    final EditText etUsername = (EditText) view.findViewById(R.id.etUsername);
    final EditText etPassword = (EditText) view.findViewById(R.id.etPassword);
    final EditText etEmail = (EditText) view.findViewById(R.id.etEmail);
    final EditText etPhone = (EditText) view.findViewById(R.id.etPhone);
    final EditText etAge = (EditText) view.findViewById(R.id.etAge);
    final Button bRegister = (Button) view.findViewById(R.id.bRegister);
Jimit Patel
  • 3,985
  • 2
  • 30
  • 50