Java 为什么程序会意外停止?
我正在编写一个非常基本的程序,它的目标是文本视图在按下屏幕上的按钮后显示短语“Hello”,但无法理解为什么每次我运行它时,它都会说应用程序意外停止 这是我写的程序:Java 为什么程序会意外停止?,java,android,Java,Android,我正在编写一个非常基本的程序,它的目标是文本视图在按下屏幕上的按钮后显示短语“Hello”,但无法理解为什么每次我运行它时,它都会说应用程序意外停止 这是我写的程序: public class EtudeActivityActivity extends Activity{ TextView tvResponse; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedI
public class EtudeActivityActivity extends Activity{
TextView tvResponse;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView tvResponse = (TextView) findViewById (R.id.tvResponse);
}
public void updateTV(View v) {
tvResponse.setText("Hello");
}
}
另外,我在main.xml文件中为按钮插入了一个android:onClick=“updateTV”
谢谢你的帮助 我怀疑您有一个名为
tvResponse
的实例变量,您没有向我们展示它-这就是updateTV
方法将引用的内容。这与您在onCreate
中声明的本地tvsresponse
变量完全不同。我怀疑如果您将onCreate
的最后一行从局部变量声明更改为tvsresponse
变量的简单赋值,它可能会起作用。否则,如果没有为实例tvResponse
变量赋值,则其默认值为null
,在updateTV
中导致NullPointerException
我怀疑您有一个名为tvResponse
的实例变量,您没有向我们展示它-这就是updateTV
方法将引用的内容。这与您在onCreate
中声明的本地tvsresponse
变量完全不同。我怀疑如果您将onCreate
的最后一行从局部变量声明更改为tvsresponse
变量的简单赋值,它可能会起作用。否则,如果没有为实例tvsresponse
变量赋值,它的默认值将为null
,导致updateTV
中出现NullPointerException
,这是因为您没有设置tvsresponse
成员变量。而是用相同的名称设置一个新的局部变量。因此,当您调用setText()
时,您正在访问一个无效的引用
你需要改变
final TextView tvResponse = (TextView) findViewById (R.id.tvResponse);
到
设置成员变量,使其在以后(调用
updateTV()
时)有一个有效的引用。这是因为您没有设置tvResponse
成员变量。而是用相同的名称设置一个新的局部变量。因此,当您调用setText()
时,您正在访问一个无效的引用
你需要改变
final TextView tvResponse = (TextView) findViewById (R.id.tvResponse);
到
设置成员变量,使其在以后(调用
updateTV()
时)有一个有效的引用。非常感谢!当我在查找其id时将tvresponse定义为文本视图时,它为什么不起作用呢?因为tvresponse
的本地定义隐藏了成员变量,所以您没有更改成员变量,因此将其保留为默认值:null
。一旦onCreate()
完成,findViewById()
的结果就丢失了。这很有效,非常感谢!当我在查找其id时将tvresponse定义为文本视图时,它为什么不起作用呢?因为tvresponse
的本地定义隐藏了成员变量,所以您没有更改成员变量,因此将其保留为默认值:null
。一旦onCreate()
完成,findViewById()
的结果就会丢失。