Java Android EditText.getText()出现空指针异常

Java Android EditText.getText()出现空指针异常,java,android,nullpointerexception,Java,Android,Nullpointerexception,我有一个无法解决的问题。再看一眼就很方便了。我已经看了这个问题,我已经检查过了,以确保我按照他们说的做了,我相信我是这样的,因为文本输入存在于具有正确id的xml中,我可以看到对象的声明,并且没有拼写错误。当我放置 我已经检查了我的代码,我觉得它是对的。我正在创建变量并向它传递一个元素,该元素存在于它所引用的视图中。下面是我的代码。正如您所看到的,我正在创建一个编辑文本对象,该对象具有文本输入元素的值——该行似乎正在运行,然后在下一行出现错误,指出不能对空对象引用调用getText()。我在点击

我有一个无法解决的问题。再看一眼就很方便了。我已经看了这个问题,我已经检查过了,以确保我按照他们说的做了,我相信我是这样的,因为文本输入存在于具有正确id的xml中,我可以看到对象的声明,并且没有拼写错误。当我放置

我已经检查了我的代码,我觉得它是对的。我正在创建变量并向它传递一个元素,该元素存在于它所引用的视图中。下面是我的代码。正如您所看到的,我正在创建一个编辑文本对象,该对象具有文本输入元素的值——该行似乎正在运行,然后在下一行出现错误,指出不能对空对象引用调用
getText()
。我在点击前输入文本,所以它不应该为空。咔哒声在片段中发生;我不认为这是个问题,但我可能错了

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    final View view = inflater.inflate(R.layout.fragment_ping, container, false);
    Button pingButton = (Button) view.findViewById(R.id.pingButton);
    pingButton.setOnClickListener(this);

    return view;
}

public void onClick(View v) {
    switch(v.getId()) {
        case R.id.pingButton:
            EditText text = (EditText) v.findViewById(R.id.editText);
            String value = text.getText().toString();
            String s = ping(value);
            TextView result = (TextView) v.findViewById(R.id.textView);
            result.setText(s);
            break;
    }
}
我现在对此有点不知所措。我不明白为什么会这样。我能做些什么来解决这个问题

回溯:

01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime: FATAL EXCEPTION: main
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime: Process: uk.aperture.pinger, PID: 10966
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime:     at uk.aperture.pinger.Ping.onClick(Ping.java:112)
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime:     at android.view.View.performClick(View.java:5198)
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:21147)
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-05 12:35:49.323 10966-10966/uk.aperture.pinger E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
编辑:


出于某种原因,这个问题被标记为重复的——事实并非如此——然后IMHO错误地关闭了。这个问题是完全正确的;你可以看到我有一个作业和作业的访问。我相信我正在传递整个视图,如我发布的扩展代码所示

您使用了
pingButton
的视图来查找编辑文本的id

EditText text = (EditText) v.findViewById(R.id.editText);
意味着

使用布局视图查找子视图的id

为什么
NPE


因为:
EditText
不在
Botton

内,所以这个问题的答案是因为@Amy在评论中提到了什么。问题是我认为整个视图都传递给了click函数;事实证明,事实并非如此。因此,我所做的是将TextView和EditText的声明移动到类的顶部,并使它们在整个过程中都可以访问,然后在
onCreateFunction
中将元素分配给它们,并能够从中访问数据。这是我修改过的代码,不包括类顶部的声明

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_ping, container, false);
        Button pingButton = (Button) view.findViewById(R.id.pingButton);
        pingText = (EditText) view.findViewById(R.id.editText);
        pingResult = (TextView) view.findViewById(R.id.textView);
        pingButton.setOnClickListener(this);

        return view;
    }

    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.pingButton:
                String value = pingText.getText().toString();
                boolean s = ping(value);
                if(s == true)
                {
                    pingResult.setText("Successful ping to " + value);
                } else {
                    pingResult.setText("Unsuccessful ping to " + value);
                }
                break;
        }
    }

感谢那些评论。我不知道完整视图没有通过。

这是一个ping地址的函数,它与问题无关,真的没有那么远。这是上面的文本赋值错误,只是想给出比引起问题的两行更多的上下文。这行似乎在这行下面工作。错误是空对象引用上的
,请您澄清所有相关代码的含义。正如Igw150所说,您正在单击的
视图中搜索
编辑文本
,该视图不是
视图组
,因此
findViewById
将找不到任何内容。声明您的
EditText
global并在
onViewCreated
方法中调用
findViewById
。我不得不等待两天
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_ping, container, false);
        Button pingButton = (Button) view.findViewById(R.id.pingButton);
        pingText = (EditText) view.findViewById(R.id.editText);
        pingResult = (TextView) view.findViewById(R.id.textView);
        pingButton.setOnClickListener(this);

        return view;
    }

    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.pingButton:
                String value = pingText.getText().toString();
                boolean s = ping(value);
                if(s == true)
                {
                    pingResult.setText("Successful ping to " + value);
                } else {
                    pingResult.setText("Unsuccessful ping to " + value);
                }
                break;
        }
    }