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
1 Answer
Reset to default 0The 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;
}