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