错误是:
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);
}
}
基本上,我正在为我的岳父制作一个简单的应用程序,所以他不必在他的步枪炮塔上计算MOA。他的范围是四分之一MOA,所以如果他在550码处射门,他必须使用9 MOA,这是9组4次点击。
我有一个名为rangeEntry的输入范围EditText 我有一个名为btnClickCalc的按钮 我有一个名为turretClicks的TextView,它应该显示所述范围所需的点击次数。
我错过了什么错误?我看到这是因为某些东西是空的......我看到其他文章说他们没有实例化某些东西......但我没看到我的问题是什么。
任何?
XML是:
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Calculate MOA"
android:id="@+id/textView"
android:textColor="#ff0000"
android:textSize="28dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Calculate Clicks"
android:id="@+id/btnClickCalc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:textColor="#ff0000"
android:onClick="calcClick" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/turretClicks"
android:textSize="28dp"
android:textColor="#ff0000"
android:hint="0"
android:background="#ffffff"
android:layout_below="@+id/btnClickCalc"
android:layout_centerHorizontal="true"
android:layout_marginTop="74dp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/rangeEntry"
android:layout_marginTop="91dp"
android:textSize="20dp"
android:hint="Enter Range"
android:background="#ffffff"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clicks"
android:id="@+id/textView2"
android:layout_below="@+id/turretClicks"
android:layout_centerHorizontal="true"
android:background="#ffffff"
android:textColor="#fc0000"
android:textSize="20dp" />
下面的解决方案修复了原始错误,但我现在得到了:
10-31 22:11:04.754 10019-10019/lol2dubs.stevemoa E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{lol2dubs.stevemoa/lol2dubs.stevemoa.MainActivity}: java.lang.NumberFormatException: Invalid int: ""
答案 0 :(得分:5)
在Textview
之后将onCreate()
定义移到setContentView()
内。
像这样,
turretClicks = (TextView)findViewById(R.id.turretClicks);
只有在设置ContentView
后,您的活动才知道要解析哪个布局文件树以查找您指定的视图。
接下来,对stringRange
Integer
内部onClick
事件进行onClick
投射,并在NumberFormatException
内投射后移动所有代码以避免@Override
,
另外,在onClick
方法之前添加ShDocVw
注释。
答案 1 :(得分:0)
将您的代码更改为这样,
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 --
答案 2 :(得分:0)
您必须在setContentView(R.layout.activity_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);
}
}