零点例外 - > editText.getText()。的toString()

时间:2014-04-09 16:10:57

标签: java android

当我这样做时,我得到Null Point Exception:

 String Serial = SerialField.getText().toString();

以下是代码:

public static class PointCreation extends Fragment {

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

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

        Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);
        buttonGuardar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity().getApplicationContext(), "tou a carregar no botao guardar", Toast.LENGTH_LONG).show();

                final EditText SerialField = (EditText) view.findViewById(R.id.Serial);
                final EditText ObservationField = (EditText) view.findViewById(R.id.Observation);
                String Serial = SerialField.getText().toString();
                String Observation = ObservationField.getText().toString();
                pointsList.add(new Point("Serial", Observation, false, 1, 2, 3, 4,
                        5, 6, 7, 8, 9));
                Toast.makeText(getActivity().getApplicationContext(), Observation, Toast.LENGTH_LONG).show();
            }
        });
        Button buttonApagar = (Button) view.findViewById(R.id.buttonApagar);
        buttonApagar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity().getApplicationContext(), "tou a carregar no botao apagar", Toast.LENGTH_LONG).show();
            }
        });
        return view;
    }
}

这里是xml:

<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/serial"
        android:layout_width="150dp"
        android:layout_height="45dp"
        android:textSize="20sp"
        android:textStyle="bold"
        android:gravity="center"
        android:text="Serial"
        />

    <EditText
        android:id="@+id/Serial"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/serial"
        android:inputType="text"
        android:layout_width="fill_parent"
        >
    </EditText>

    <TextView
        android:id="@+id/Observations"
        android:layout_width="150dp"
        android:layout_height="45dp"
        android:textSize="20sp"
        android:textStyle="bold"
        android:gravity="center"
        android:layout_below="@+id/serial"
        android:text="Observações" />

    <EditText
        android:id="@+id/Observation"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/Observations"
        android:inputType="text"
        android:layout_width="fill_parent"
        android:layout_below="@+id/serial"
        >
    </EditText>
</RelativeLayout>

logcat的:

04-09 17:07:38.639  14736-14736/com.example.testlayout.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.testlayout.app, PID: 14736
    java.lang.NullPointerException
            at com.example.testlayout.app.PointsList$PointCreation$1.onClick(PointsList.java:120)
            at android.view.View.performClick(View.java:4438)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)

5 个答案:

答案 0 :(得分:5)

因为在这种情况下view是您的按钮。将onClickListener中的视图重命名为其他内容,它应该可以正常工作

答案 1 :(得分:0)

您需要将其移出按钮onClick

 EditText SerialField = (EditText) view.findViewById(R.id.Serial);

它正在寻找EditText作为Button的孩子而不是这种情况会发生什么

所以它应该是

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view = inflater.inflate(R.layout.point_creation, container, false);
        final EditText SerialField = (EditText) view.findViewById(R.id.Serial);
        final EditText ObservationField = (EditText) view.findViewById(R.id.Observation);
        Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);
        buttonGuardar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity().getApplicationContext(), "tou a carregar no botao guardar", Toast.LENGTH_LONG).show();
                String Serial = SerialField.getText().toString();
                String Observation = ObservationField.getText().toString();
                pointsList.add(new Point("Serial", Observation, false, 1, 2, 3, 4,
                        5, 6, 7, 8, 9));
                Toast.makeText(getActivity().getApplicationContext(), Observation, Toast.LENGTH_LONG).show();
            }
        });
        Button buttonApagar = (Button) view.findViewById(R.id.buttonApagar);
        buttonApagar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity().getApplicationContext(), "tou a carregar no botao apagar", Toast.LENGTH_LONG).show();
            }
        });
        return view;
    }

编辑:

tyczj指出你可以重命名

 @Override
 public void onClick(View view) 

 @Override
 public void onClick(View v) 

并将View view更改为final View view。但是,无需每次EditText点击

初始化Button

答案 2 :(得分:0)

试试这个

private EditText SerialField;
    private EditText ObservationField;
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout for this fragment

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

        SerialField = (EditText) view
                .findViewById(R.id.Serial);
        ObservationField = (EditText) view
                .findViewById(R.id.Observation);
        Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);
        buttonGuardar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity().getApplicationContext(),
                        "tou a carregar no botao guardar", Toast.LENGTH_LONG)
                        .show();

                String Serial = SerialField.getText().toString();
                String Observation = ObservationField.getText().toString();
                pointsList.add(new Point("Serial", Observation, false, 1, 2, 3,
                        4, 5, 6, 7, 8, 9));
                Toast.makeText(getActivity().getApplicationContext(),
                        Observation, Toast.LENGTH_LONG).show();
            }
        });
        Button buttonApagar = (Button) view.findViewById(R.id.buttonApagar);
        buttonApagar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity().getApplicationContext(),
                        "tou a carregar no botao apagar", Toast.LENGTH_LONG)
                        .show();
            }
        });
        return view;
    }

答案 3 :(得分:0)

想想这里发生的事情:

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

        Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);
        buttonGuardar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {  //Hello view
                Toast.makeText(getActivity().getApplicationContext(), "tou a carregar no botao guardar", Toast.LENGTH_LONG).show();

                final EditText SerialField = (EditText) view.findViewById(R.id.Serial);

您正试图从点击的视图中找到该视图,因为所点击的视图正在传递给onClick方法。

解决方案:

尝试在onCreateView中初始化您的EditText而不是onClick,并将其设为全局,如下所示:

 EditText SerialField, ObservationField;
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view = inflater.inflate(R.layout.point_creation, container, false);
        SerialField = (EditText) view.findViewById(R.id.Serial);
        ObservationField = (EditText) view.findViewById(R.id.Observation);

        Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);

答案 4 :(得分:0)

将这两行移出setOnClickListener

final EditText SerialField = (EditText) view.findViewById(R.id.Serial);
final EditText ObservationField = (EditText) view.findViewById(R.id.Observation);

它会起作用..

试一试......