Исключение Null Pointer – получение значения EditText

Это мой первый вопрос здесь, я буду извиняться заранее, если я не задал этот вопрос очень хорошо. Я рассмотрел другие вопросы, подобные моей проблеме, но я не нашел хорошего решения, чтобы удовлетворить то, что происходит в моей программе.

Поэтому моя проблема заключается в том, что я пытаюсь присвоить значение переменной с именем num1 из моего поля EditText называемого num1TextField , но num1TextField мне не повезло.

Сегмент внутри моего java-файла, который генерирует исключение:

 EditText num1Field = (EditText)v.findViewById(R.id.num1TextField); num1 = num1Field.getText().toString(); 

Я высоко ценю каждый вклад в эту проблему заранее.


Вот мой файл fragment_compute.xml :

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="14dp" android:text="@string/compute_activity" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView1" android:layout_centerHorizontal="true" android:layout_marginTop="44dp" android:text="@string/num_1" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/num1TextField" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView2" android:layout_centerHorizontal="true" android:ems="10" android:inputType="number" android:gravity="center" > <requestFocus /> </EditText> <EditText android:id="@+id/num2TextField" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/num1TextField" android:layout_below="@+id/textView3" android:ems="10" android:inputType="number" android:layout_centerHorizontal="true" android:gravity="center" > </EditText> <TextView android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/num2TextField" android:layout_centerHorizontal="true" android:layout_marginTop="22dp" android:text="@string/result" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/num1TextField" android:layout_centerHorizontal="true" android:layout_marginTop="22dp" android:text="@string/num_2" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView4" android:layout_centerHorizontal="true" android:layout_marginTop="22dp" /> <Button android:id="@+id/compute_multiply" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/num2TextField" android:layout_below="@+id/result" android:layout_marginTop="40dp" android:text="@string/multiply" /> <Button android:id="@+id/compute_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/compute_multiply" android:layout_alignBottom="@+id/compute_multiply" android:layout_alignLeft="@+id/num2TextField" android:text="@string/add" /> </RelativeLayout> 

Вот мой код ComputeFragment.java :

 public class ComputeFragment extends Fragment { String num1; String num2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_compute, parent, false); // Add Button Button addButton = (Button)v.findViewById(R.id.compute_add); addButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // ERROR STARTS HERE! EditText num1Field = (EditText)v.findViewById(R.id.num1TextField); num1 = num1Field.getText().toString(); // Null Pointer Exception is thrown here! EditText num2Field = (EditText)v.findViewById(R.id.num2TextField); num2 = num2Field.getText().toString(); // ERROR ENDS HERE! Intent i = new Intent(getActivity(), AddActivity.class); i.putExtra("x", num1); i.putExtra("y", num2); startActivityForResult(i,0); } }); return v; } } 

Спасибо всем и хорошо провели день!

Параметр v в EditText num1Field = (EditText)v.findViewById(R.id.num1TextField); Это ваша кнопка, а не весь вид.

Вы должны объявить переменную в onCreateView :

 final EditText num1Field = (EditText)v.findViewById(R.id.num1TextField); 

И используйте его, чтобы получить значение в onClick

 num1 = num1Field.getText().toString(); 

Представление параметра – это кнопка. Если кнопка находится на том же родительском объекте, что и редактируемые тексты, вы также можете сделать:

 View parentView = (View) view.getParent(); EditText num1TextField = (EditText)parentView.findViewById(R.id.num1TextField); 

Попробуйте этот код –

 @Override public void onClick(View view) { EditText num1Field = (EditText)v.findViewById(R.id.num1TextField); if(num1Field.getText().length() > 0) { num1 = num1Field.getText().toString(); } }