Android 找不到错误
错误是:Android 找不到错误,android,nullpointerexception,Android,Nullpointerexception,错误是: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{lol2dubs.stevemoa/lol2dubs.stevemoa.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{lol2dubs.stevemoa/lol2dubs.stevemoa.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
代码是:
public class MainActivity extends AppCompatActivity {
double MOA;
TextView turretClicks = (TextView)findViewById(R.id.turretClicks);
boolean noMOA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText range = (EditText) findViewById(R.id.rangeEntry);
String stringRange = range.getText().toString();
int finalRange = Integer.parseInt(stringRange);
if(finalRange <= 200) {
MOA = 0;
}
if(finalRange > 200 && finalRange <= 225){
MOA = .5;
}
if(finalRange > 225 && finalRange <= 250) {
MOA = 1;
}
if(finalRange > 250 && finalRange <= 275) {
MOA = 1.65;
}
if(finalRange > 275 && finalRange <= 300) {
MOA = 2.25;
}
if(finalRange > 300 && finalRange <= 325) {
MOA = 2.8;
}
if(finalRange > 325 && finalRange <= 350) {
MOA = 3.5;
}
if(finalRange > 350 && finalRange <= 375) {
MOA = 4.0;
}
if(finalRange > 375 && finalRange <= 400) {
MOA = 4.75;
}
if(finalRange > 400 && finalRange <= 425) {
MOA = 5.50;
}
if(finalRange > 425 && finalRange <= 450) {
MOA = 6.25;
}
if(finalRange > 450 && finalRange <= 475) {
MOA = 7.0;
}
if(finalRange > 475 && finalRange <= 500) {
MOA = 7.5;
}
if(finalRange > 500 && finalRange <= 525) {
MOA = 8.25;
}
if(finalRange > 525 && finalRange <= 550) {
MOA = 9.0;
}
if(finalRange > 550 && finalRange <= 575) {
MOA = 9.75;
}
if(finalRange > 575 && finalRange <= 600) {
MOA = 10.5;
}
if(finalRange > 600 && finalRange <= 625) {
MOA = 11.5;
}
if(finalRange > 625 && finalRange <= 650) {
MOA = 12.25;
}
if(finalRange > 650 && finalRange <= 675) {
MOA = 13;
}
if(finalRange > 675 && finalRange <= 700) {
MOA = 14;
}
if(finalRange > 700) {
noMOA = true;
}
// Create an anonymous implementation of OnClickListener
View.OnClickListener btnClickCalc = new View.OnClickListener() {
public void onClick(View v) {
double clicks = (MOA * 4);
String toText = Double.toString(clicks);
turretClicks.setText(toText);
}
};
// Capture our button from layout
Button button = (Button)findViewById(R.id.btnClickCalc);
// Register the onClick listener with the implementation above
button.setOnClickListener(btnClickCalc);
}
}
在setContentView之后将Textview定义移动到onCreate中
像这样,
turretClicks = (TextView)findViewById(R.id.turretClicks);
只有在设置ContentView之后,活动才知道要解析哪个布局文件树以查找指定的视图
接下来,将stringRange转换为onClick事件中的整数,并将所有代码移到onClick事件中转换之后,以避免NumberFormatException
而且,add@Override注释在onClick方法之前。将代码更改为如下所示
TextView turretClicks; // changed here
boolean noMOA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
turretClicks = (TextView)findViewById(R.id.turretClicks); // added the line here
---- and so on --
必须在setContentViewR.layout.activity\u main之后定义视图 将其复制到您的项目中:
public class MainActivity extends AppCompatActivity {
double MOA;
TextView turretClicks;
boolean noMOA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
turretClicks = (TextView)findViewById(R.id.turretClicks);
EditText range = (EditText) findViewById(R.id.rangeEntry);
String stringRange = range.getText().toString();
int finalRange = Integer.parseInt(stringRange);
if(finalRange <= 200) {
MOA = 0;
}
if(finalRange > 200 && finalRange <= 225){
MOA = .5;
}
if(finalRange > 225 && finalRange <= 250) {
MOA = 1;
}
if(finalRange > 250 && finalRange <= 275) {
MOA = 1.65;
}
if(finalRange > 275 && finalRange <= 300) {
MOA = 2.25;
}
if(finalRange > 300 && finalRange <= 325) {
MOA = 2.8;
}
if(finalRange > 325 && finalRange <= 350) {
MOA = 3.5;
}
if(finalRange > 350 && finalRange <= 375) {
MOA = 4.0;
}
if(finalRange > 375 && finalRange <= 400) {
MOA = 4.75;
}
if(finalRange > 400 && finalRange <= 425) {
MOA = 5.50;
}
if(finalRange > 425 && finalRange <= 450) {
MOA = 6.25;
}
if(finalRange > 450 && finalRange <= 475) {
MOA = 7.0;
}
if(finalRange > 475 && finalRange <= 500) {
MOA = 7.5;
}
if(finalRange > 500 && finalRange <= 525) {
MOA = 8.25;
}
if(finalRange > 525 && finalRange <= 550) {
MOA = 9.0;
}
if(finalRange > 550 && finalRange <= 575) {
MOA = 9.75;
}
if(finalRange > 575 && finalRange <= 600) {
MOA = 10.5;
}
if(finalRange > 600 && finalRange <= 625) {
MOA = 11.5;
}
if(finalRange > 625 && finalRange <= 650) {
MOA = 12.25;
}
if(finalRange > 650 && finalRange <= 675) {
MOA = 13;
}
if(finalRange > 675 && finalRange <= 700) {
MOA = 14;
}
if(finalRange > 700) {
noMOA = true;
}
// Create an anonymous implementation of OnClickListener
View.OnClickListener btnClickCalc = new View.OnClickListener() {
@Override
public void onClick(View v) {
double clicks = (MOA * 4);
String toText = Double.toString(clicks);
turretClicks.setText(toText);
}
};
// Capture our button from layout
Button button = (Button)findViewById(R.id.btnClickCalc);
// Register the onClick listener with the implementation above
button.setOnClickListener(btnClickCalc);
}
}
另外,onCreate方法告诉我太复杂,无法分析数据流算法。我应该把所有的if语句都拉出来,放在onClick中还是什么的?你的两个解决方案都清除了错误。但是现在我得到了无效的int:10-31 22:11:04.754 10019-10019/lol2dubs.stevemoa E/AndroidRuntime:java.lang.RuntimeException:无法启动活动组件信息{lol2dubs.stevemoa/lol2dubs.stevemoa.MainActivity}:java.lang.NumberFormatException:无效的int:你能用当前日志更新你的问题吗?上面没有显示哪一行。有一个关于数字格式异常的线程,我现在得到了它。这是因为所有的if语句都不在onClick中。他们在一起。因此,无效的int是因为创建活动时范围字段中没有条目。Nice。如果答案有帮助,就接受它。谢谢:希望我能记下两个答案。你的回答是正确的,但是尤瓦·拉吉回答了我的第二个问题,所以我给他答案。你可以把任何问题标记为已接受。很乐意帮忙。虽然我不知道Yuva是如何回答您的第二个问题的,因为您自己回答了这个问题,但他没有建议将您的代码放在onClick中。
turretClicks = (TextView)findViewById(R.id.turretClicks);
TextView turretClicks; // changed here
boolean noMOA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
turretClicks = (TextView)findViewById(R.id.turretClicks); // added the line here
---- and so on --
public class MainActivity extends AppCompatActivity {
double MOA;
TextView turretClicks;
boolean noMOA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
turretClicks = (TextView)findViewById(R.id.turretClicks);
EditText range = (EditText) findViewById(R.id.rangeEntry);
String stringRange = range.getText().toString();
int finalRange = Integer.parseInt(stringRange);
if(finalRange <= 200) {
MOA = 0;
}
if(finalRange > 200 && finalRange <= 225){
MOA = .5;
}
if(finalRange > 225 && finalRange <= 250) {
MOA = 1;
}
if(finalRange > 250 && finalRange <= 275) {
MOA = 1.65;
}
if(finalRange > 275 && finalRange <= 300) {
MOA = 2.25;
}
if(finalRange > 300 && finalRange <= 325) {
MOA = 2.8;
}
if(finalRange > 325 && finalRange <= 350) {
MOA = 3.5;
}
if(finalRange > 350 && finalRange <= 375) {
MOA = 4.0;
}
if(finalRange > 375 && finalRange <= 400) {
MOA = 4.75;
}
if(finalRange > 400 && finalRange <= 425) {
MOA = 5.50;
}
if(finalRange > 425 && finalRange <= 450) {
MOA = 6.25;
}
if(finalRange > 450 && finalRange <= 475) {
MOA = 7.0;
}
if(finalRange > 475 && finalRange <= 500) {
MOA = 7.5;
}
if(finalRange > 500 && finalRange <= 525) {
MOA = 8.25;
}
if(finalRange > 525 && finalRange <= 550) {
MOA = 9.0;
}
if(finalRange > 550 && finalRange <= 575) {
MOA = 9.75;
}
if(finalRange > 575 && finalRange <= 600) {
MOA = 10.5;
}
if(finalRange > 600 && finalRange <= 625) {
MOA = 11.5;
}
if(finalRange > 625 && finalRange <= 650) {
MOA = 12.25;
}
if(finalRange > 650 && finalRange <= 675) {
MOA = 13;
}
if(finalRange > 675 && finalRange <= 700) {
MOA = 14;
}
if(finalRange > 700) {
noMOA = true;
}
// Create an anonymous implementation of OnClickListener
View.OnClickListener btnClickCalc = new View.OnClickListener() {
@Override
public void onClick(View v) {
double clicks = (MOA * 4);
String toText = Double.toString(clicks);
turretClicks.setText(toText);
}
};
// Capture our button from layout
Button button = (Button)findViewById(R.id.btnClickCalc);
// Register the onClick listener with the implementation above
button.setOnClickListener(btnClickCalc);
}
}