Android 在启动期间获取NullPointerException
我有九个按钮,每个按钮在编辑文本中输入一个数字,有点像计算器。我只是作为一个简单的项目来做这件事,但我一直收到这些NullPointerExeption。如果我只使用预先制作的onCreate()方法运行它,它似乎可以工作,但一旦我开始在类声明下声明变量,它就会抛出一些异常。感谢您的帮助。谢谢Android 在启动期间获取NullPointerException,android,nullpointerexception,Android,Nullpointerexception,我有九个按钮,每个按钮在编辑文本中输入一个数字,有点像计算器。我只是作为一个简单的项目来做这件事,但我一直收到这些NullPointerExeption。如果我只使用预先制作的onCreate()方法运行它,它似乎可以工作,但一旦我开始在类声明下声明变量,它就会抛出一些异常。感谢您的帮助。谢谢 public class MainActivity extends Activity implements OnClickListener { EditText display = (EditText)
public class MainActivity extends Activity implements OnClickListener {
EditText display = (EditText)findViewById(R.id.numdisplay);
Button clearbtn = (Button)findViewById(R.id.clear);
Button ninenum = (Button)findViewById(R.id.nine);
Button eightnum = (Button)findViewById(R.id.eight);
Button sevennum = (Button)findViewById(R.id.seven);
Button sixnum = (Button)findViewById(R.id.six);
Button fivenum = (Button)findViewById(R.id.five);
Button fournum = (Button)findViewById(R.id.four);
Button threenum = (Button)findViewById(R.id.three);
Button twonum = (Button)findViewById(R.id.two);
Button onenum = (Button)findViewById(R.id.one);
Button enterbtn = (Button)findViewById(R.id.enter);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
onclicks(); //setting all the onclick listeners
}
public void onclicks() { //just setting onclick listeners, so it doesn't bloat up the oncreate method
clearbtn.setOnClickListener(this);
ninenum.setOnClickListener(this);
eightnum.setOnClickListener(this);
sevennum.setOnClickListener(this);
sixnum.setOnClickListener(this);
fivenum.setOnClickListener(this);
fournum.setOnClickListener(this);
threenum.setOnClickListener(this);
twonum.setOnClickListener(this);
onenum.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.clear: /** More switch cases will be put here*/
display.setText("");
break;
}
}
}
放置此代码
ditText display = (EditText)findViewById(R.id.numdisplay);
Button clearbtn = (Button)findViewById(R.id.clear);
Button ninenum = (Button)findViewById(R.id.nine);
Button eightnum = (Button)findViewById(R.id.eight);
Button sevennum = (Button)findViewById(R.id.seven);
Button sixnum = (Button)findViewById(R.id.six);
Button fivenum = (Button)findViewById(R.id.five);
Button fournum = (Button)findViewById(R.id.four);
Button threenum = (Button)findViewById(R.id.three);
Button twonum = (Button)findViewById(R.id.two);
Button onenum = (Button)findViewById(R.id.one);
Button enterbtn = (Button)findViewById(R.id.enter);
在setContentView
因为
只有在onCreate()
中setContentView
才能获取视图引用,因此当您试图在onCreate()之外获取引用时,您将获得null
引用,访问null
将获得NullPointerException
这样申报
Button clearbtn ,ninenum ,eightnum ,sevennum ,sixnum ,fivenum ,fivenum ,fournum ,threenum ,twonum ,onenum ,enterbtn ;
EditText display;
在onCreate()中
只有在设置ContentView布局后,Findviewbyid才会返回。你所做的是在课堂上尝试重新学习
尝试添加
EditText display = (EditText)findViewById(R.id.numdisplay);
Button clearbtn = (Button)findViewById(R.id.clear);
Button ninenum = (Button)findViewById(R.id.nine);
Button eightnum = (Button)findViewById(R.id.eight);
Button sevennum = (Button)findViewById(R.id.seven);
Button sixnum = (Button)findViewById(R.id.six);
Button fivenum = (Button)findViewById(R.id.five);
Button fournum = (Button)findViewById(R.id.four);
Button threenum = (Button)findViewById(R.id.three);
Button twonum = (Button)findViewById(R.id.two);
Button onenum = (Button)findViewById(R.id.one);
Button enterbtn = (Button)findViewById(R.id.enter);
在setContentView
语句之后setContentView()
用于将活动内容设置为显式视图,因此在引用视图之前,不能使用其中的控件
试试下面的代码
public class MainActivity extends Activity implements OnClickListener {
EditText display;
Button clearbtn,ninenum,eightnum,sevennum,sixnum,fivenum,fournum,threenum,twonum,onenum,enterbtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = (EditText)findViewById(R.id.numdisplay);
onclicks(); //setting all the onclick listeners
}
public void onclicks() { //just setting onclick listeners, so it doesn't bloat up the oncreate method
clearbtn.setOnClickListener(this);
ninenum.setOnClickListener(this);
eightnum.setOnClickListener(this);
sevennum.setOnClickListener(this);
sixnum.setOnClickListener(this);
fivenum.setOnClickListener(this);
fournum.setOnClickListener(this);
threenum.setOnClickListener(this);
twonum.setOnClickListener(this);
onenum.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.clear: /** More switch cases will be put here*/
display.setText("");
break;
}
}
}
希望这有帮助。它仍在抛出异常。这就是最初发生的事情,我不知道为什么。我确保onclicklisteners和edittext放在SetContentView部分之后。@ThatGuyThere:尝试用上面的代码替换完整的代码…如果问题仍然存在,请将日志放在这里
public class MainActivity extends Activity implements OnClickListener {
EditText display;
Button clearbtn,ninenum,eightnum,sevennum,sixnum,fivenum,fournum,threenum,twonum,onenum,enterbtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = (EditText)findViewById(R.id.numdisplay);
onclicks(); //setting all the onclick listeners
}
public void onclicks() { //just setting onclick listeners, so it doesn't bloat up the oncreate method
clearbtn.setOnClickListener(this);
ninenum.setOnClickListener(this);
eightnum.setOnClickListener(this);
sevennum.setOnClickListener(this);
sixnum.setOnClickListener(this);
fivenum.setOnClickListener(this);
fournum.setOnClickListener(this);
threenum.setOnClickListener(this);
twonum.setOnClickListener(this);
onenum.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.clear: /** More switch cases will be put here*/
display.setText("");
break;
}
}
}