Dog*_*nar 4 java android declaration android-edittext
我有编程语言的经验,但对于android编程有点新.
我有一个程序,其中包含一些字段,用作标签(textview),按钮和数据输入(edittext).
每当我在程序开头用任何方法声明它们时(当然在课堂上),当我启动我的应用程序时它崩溃并且模拟给出"不幸的是,你的程序已经停止"警报.
Eclipse没有给出声明的任何错误,我确实使用相同的方式来定义没有问题的常规变量.当我在类体中声明一个mediaplayer对象时,它也会出现相同的错误.
有谁知道它为什么会出错?是否有另一种方式来声明全局对象,如edittext,viewtext等...在方法中一遍又一遍地声明它们对我来说听起来很奇怪.
谢谢!!
公共类TrainerActivity扩展Activity {
Button stopTimer = (Button)findViewById(R.id.StopTimer);
Button startTimer = (Button)findViewById(R.id.StartTimer);
EditText totalTime = (EditText)findViewById(R.id.TotalTime);
EditText enterMin = (EditText)findViewById(R.id.EnterMin);
EditText enterSec = (EditText)findViewById(R.id.EnterSec);
private boolean breaker = false;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startTimer.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Button_StartTimer();
}
});
stopTimer.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Button_StopTimer();
}
});
}
Run Code Online (Sandbox Code Playgroud)
如果没有看到你正在尝试的代码的示例代码,就不可能明确地说(我们不会在这里做读心).但是让我猜一下,你在做这样的事情?......
public class MyActivity extends Activity {
TextView tv1; // This is fine.
TextView tv2 = (TextView) findViewById(R.id.textview2); // Don't do this.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv1 = (TextView) findViewById(R.id.textview1); // This is fine
tv1.setText("Some text"); // This works
tv2.setText("Some text"); // NullPointerException here
}
}
Run Code Online (Sandbox Code Playgroud)
这tv2.setText(...)将失败,因为您findViewById(...)在调用之前使用BEFORE setContenetView(...),因此tv2将为null.
将您的小部件声明为您的实例成员是完全可以接受的,Activity但是在您findViewById(...)设置内容视图之后才尝试使用它.