So I'm trying to get user input using EditText and display the text into TextView once the "translate" button is clicked. Below is my class containing the source code. Please do help ! I need to be able to extract the input from the user successfully before I extract it to be translated using Google Cloud API this is why I'm just trying to extract and show it through TextView for now but it doesn't seem to be working for now...
public class Translator extends Fragment {
public Spinner spinner1, spinner2;
TextView textView;
EditText texttotranslate;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.translator, container, false);
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
ImageButton switchbutton;
Button translatebutton;
//Both Spinner's Languages
String [] Languages =
{"English","Malay","Chinese","Korean","Japanese","Arabic","Indonesian","Spanish"};
//LanguageFromSpinner
spinner1 = (Spinner) view.findViewById(R.id.languagefromspinner);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, Languages);
adapter1.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
spinner1.setAdapter(adapter1);
//LanguageToSpinner
spinner2 = (Spinner) view.findViewById(R.id.languagetospinner);
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, Languages);
adapter2.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
spinner2.setAdapter(adapter2);
//Button to switch language between spinner1 & spinner2
switchbutton = (ImageButton) view.findViewById(R.id.languageswitchButton);
switchbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int spinner1Index = spinner1.getSelectedItemPosition();
spinner1.setSelection(spinner2.getSelectedItemPosition());
spinner2.setSelection(spinner1Index );
}
});
//Button to translate
translatebutton = (Button) view.findViewById(R.id.translatebutton);
translatebutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView = (TextView) getView().findViewById(R.id.translatedtext);
texttotranslate = (EditText) v.findViewById(R.id.translatetextinput);
String textstorage = texttotranslate.getText().toString();
textView.setText(textstorage);
}
});
--------- beginning of crash
09-26 10:43:59.824 6294-6294/project.myapplication E/AndroidRuntime: FATAL
EXCEPTION: main
Process: project.myapplication, PID: 6294
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at project.myapplication.Translator$2.onClick(Translator.java:90)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
The stacktrace indicates that your EditText
was null
when you tried to call its getText()
method.
In your event handler, you call:
texttotranslate = (EditText) v.findViewById(R.id.translatetextinput);
In this context, v
is the view that fired the click
event, aka the button. You're trying to find a view inside your button which has the id translatetextinput
.
You probably meant to write:
texttotranslate = (EditText) getView().findViewById(R.id.translatetextinput);
which will look for the view in the entire fragment's view hierarchy.