java - Trying to send data to another fragment but when I press the button it closes the app - Stack Overflow

I am trying to make an app where it controls the aspects of a garden. changing the temperature, the hum

I am trying to make an app where it controls the aspects of a garden. changing the temperature, the humidity, wind, and etc. Right now I am starting with temperature and I do not understand what I am doing wrong here is my code. This is the thermometer fragment and its supposed to send data to the home fragment and determine the number that was inputted by the user should turn on the heat or cool off the garden

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_thermometer, container, false);

Button enter = view.findViewById(R.id.btTemp);
    enter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText degrees = view.findViewById(R.id.nmDegrees);
            Bundle onOrOff = new Bundle();
            onOrOff.putInt("df1", Integer.parseInt(degrees.getText().toString()));
            getParentFragmentManager().setFragmentResult("dataFromThermometer", onOrOff);
            degrees.setText("");
        }
    });

    return view;
    }
}

//this is the home fragment
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_home, container, false);
        // Inflate the layout for this fragment

        getParentFragmentManager().setFragmentResultListener("dataFromThermometer", this, new FragmentResultListener() {
            @Override
            public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle onOrOff) {
                int temP = onOrOff.getInt("df1");
                TextView temp = view.findViewById(R.id.tvTemp);

                if(temP < 72){
                    temp.setText("Heat On!");
                }
                if(temP > 72) {
                    temp.setText("Cool Off");
                }
            }
        });
        return view;
    }
}

I have tried resyncing gradle files but my app keeps closing when i click the button. This is the error logcat gives me:

2025-03-10 22:44:21.775 27891-27891/com.example.weathergarden E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.weathergarden, PID: 27891
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
        at com.example.weathergarden.ThermometerFragment$1.onClick(ThermometerFragment.java:82)
        at android.view.View.performClick(View.java:8033)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1131)
        at android.view.View.performClickInternal(View.java:8010)
        at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
        at android.view.View$PerformClick.run(View.java:31336)
        at android.os.Handler.handleCallback(Handler.java:991)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loopOnce(Looper.java:232)
        at android.os.Looper.loop(Looper.java:317)
        at android.app.ActivityThread.main(ActivityThread.java:8787)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:591)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:871)
2025-03-10 22:44:21.793 27891-27891/com.example.weathergarden I/Process: Sending signal. PID: 27891 SIG: 9

I am trying to make an app where it controls the aspects of a garden. changing the temperature, the humidity, wind, and etc. Right now I am starting with temperature and I do not understand what I am doing wrong here is my code. This is the thermometer fragment and its supposed to send data to the home fragment and determine the number that was inputted by the user should turn on the heat or cool off the garden

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_thermometer, container, false);

Button enter = view.findViewById(R.id.btTemp);
    enter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText degrees = view.findViewById(R.id.nmDegrees);
            Bundle onOrOff = new Bundle();
            onOrOff.putInt("df1", Integer.parseInt(degrees.getText().toString()));
            getParentFragmentManager().setFragmentResult("dataFromThermometer", onOrOff);
            degrees.setText("");
        }
    });

    return view;
    }
}

//this is the home fragment
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_home, container, false);
        // Inflate the layout for this fragment

        getParentFragmentManager().setFragmentResultListener("dataFromThermometer", this, new FragmentResultListener() {
            @Override
            public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle onOrOff) {
                int temP = onOrOff.getInt("df1");
                TextView temp = view.findViewById(R.id.tvTemp);

                if(temP < 72){
                    temp.setText("Heat On!");
                }
                if(temP > 72) {
                    temp.setText("Cool Off");
                }
            }
        });
        return view;
    }
}

I have tried resyncing gradle files but my app keeps closing when i click the button. This is the error logcat gives me:

2025-03-10 22:44:21.775 27891-27891/com.example.weathergarden E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.weathergarden, PID: 27891
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
        at com.example.weathergarden.ThermometerFragment$1.onClick(ThermometerFragment.java:82)
        at android.view.View.performClick(View.java:8033)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1131)
        at android.view.View.performClickInternal(View.java:8010)
        at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
        at android.view.View$PerformClick.run(View.java:31336)
        at android.os.Handler.handleCallback(Handler.java:991)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loopOnce(Looper.java:232)
        at android.os.Looper.loop(Looper.java:317)
        at android.app.ActivityThread.main(ActivityThread.java:8787)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:591)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:871)
2025-03-10 22:44:21.793 27891-27891/com.example.weathergarden I/Process: Sending signal. PID: 27891 SIG: 9
Share edited Mar 12 at 6:14 dthorbur 1,1493 gold badges13 silver badges26 bronze badges asked Mar 11 at 3:11 IsaIsa 193 bronze badges 0
Add a comment  | 

1 Answer 1

Reset to default 0

The crash is caused by a NullPointerException when calling getText() on degrees. This happens because you are trying to find R.id.nmDegrees using view.findViewById(), but view in this context is your Button enter, not the fragment's root view.

You can fix this by defining degrees outside the setOnClickListener() scope:

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

    View view = inflater.inflate(R.layout.fragment_thermometer, container, false);

    Button enter = view.findViewById(R.id.btTemp);
    EditText degrees = view.findViewById(R.id.nmDegrees); // Find nmDgrees EditText from root view

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

            Bundle onOrOff = new Bundle();
            onOrOff.putInt("df1", Integer.parseInt(degrees.getText().toString()));

            getParentFragmentManager().setFragmentResult("dataFromThermometer", onOrOff);
            degrees.setText("");
           
        }
    });

    return view;
}

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744815708a4595310.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信