我的代码非常简单,但它没有用。我的应用程序崩溃,我收到此错误:
03-05 19:45:47.005 1858-1858/com.converter_numeralsystem.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.converter_numeralsystem.app, PID: 1858
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.converter_numeralsystem.app/com.converter_numeralsystem.app.MainActivity}: java.lang.NullPointerException
我确切知道bug在哪里,但我不知道如何摆脱它们。我对这两个版本进行了评论。你帮帮我吗?
我的Java代码:
public class MainActivity extends ActionBarActivity implements View.OnClickListener {
String x;
char y;
int c=1;
String num,n,type;
int d,b,o,h;
String dec,bin,hex,oct;
EditText number;
EditText result;
Button convert, clear;
RadioGroup rgFrom, rgTO;
int convertedResult;
int from=R.id.r10From;
int to=R.id.r2TO;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize();
}
String stNumber = number.getText().toString(); //Here is bug
int numbResult = Integer.parseInt(stNumber);
String iterResult = result.getText().toString(); //And here is bug
int convResult = Integer.parseInt(iterResult);
private void initialize() {
number = (EditText) findViewById(R.id.etNumber);
result = (EditText) findViewById(R.id.etResult);
convert = (Button) findViewById(R.id.bCalculate);
clear = (Button) findViewById(R.id.bReset);
convert.setOnClickListener(this);
clear.setOnClickListener(this);
rgFrom = (RadioGroup) findViewById(R.id.rgFrom);
rgTO = (RadioGroup) findViewById(R.id.rgTO);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.r2From:
from = rgFrom.getCheckedRadioButtonId();
break;
case R.id.r8From:
from = rgFrom.getCheckedRadioButtonId();
break;
case R.id.r10From:
from = rgFrom.getCheckedRadioButtonId();
break;
case R.id.r16From:
from = rgFrom.getCheckedRadioButtonId();
break;
case R.id.r2TO:
to = rgTO.getCheckedRadioButtonId();
break;
case R.id.r8TO:
to = rgTO.getCheckedRadioButtonId();
break;
case R.id.r10TO:
to = rgTO.getCheckedRadioButtonId();
break;
case R.id.r16TO:
to = rgTO.getCheckedRadioButtonId();
break;
case R.id.bCalculate:
//calculate();
break;
case R.id.bReset:
//reset();
break;
}
}}
我的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.converter_numeralsystem.app.MainActivity">
<TextView
android:layout_marginTop="20dp"
android:text="@string/number"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvNumber" />
<TextView
android:layout_marginTop="20dp"
android:layout_below="@id/tvNumber"
android:text="@string/result"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvResult" />
<EditText
android:id="@+id/etNumber"
android:layout_marginLeft="5dp"
android:hint="@string/enter_numb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/tvNumber"
android:layout_alignBottom="@id/tvNumber"/>
<EditText
android:id="@+id/etResult"
android:layout_marginLeft="5dp"
android:hint="@string/et_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/tvNumber"
android:layout_alignBottom="@id/tvResult"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="@string/from"
android:id="@+id/tvFrom"
android:layout_below="@id/tvResult"
android:layout_marginTop="20dp" />
<RadioGroup
android:weightSum="100"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tvFrom"
android:id="@+id/rgFrom"
android:layout_marginTop="10dp">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<RadioButton
android:layout_weight="50"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/r2From"
android:text="@string/dwa"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/r8From"
android:text="@string/osiem"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_marginRight="75dp" />
<RadioButton
android:checked="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/r10From"
android:text="@string/dziesiec"
android:layout_below="@id/r2From"
android:layout_alignStart="@id/r2From" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/r16From"
android:text="@string/szesnascie"
android:layout_alignParentRight="true"
android:layout_below="@id/r8From"
android:layout_alignStart="@id/r8From"/>
</RelativeLayout>
</RadioGroup>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="@string/to"
android:id="@+id/tvTo"
android:layout_below="@id/rgFrom"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="20dp" />
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tvTo"
android:layout_marginTop="10dp"
android:id="@+id/rgTO">
<RelativeLayout
android:id="@+id/rel2"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<RadioButton
android:checked="true"
android:layout_weight="50"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/r2TO"
android:text="@string/dwa"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/r8TO"
android:text="@string/osiem"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_marginRight="75dp" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/r10TO"
android:text="@string/dziesiec"
android:layout_below="@id/r2TO"
android:layout_alignStart="@id/r2TO" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/r16TO"
android:text="@string/szesnascie"
android:layout_alignParentRight="true"
android:layout_below="@id/r8TO"
android:layout_alignStart="@id/r8TO"/>
</RelativeLayout>
</RadioGroup>
<LinearLayout
android:layout_marginTop="10dp"
android:weightSum="100"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/rgTO">
<Button
android:layout_weight="30"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/calculate"
android:id="@+id/bCalculate"
android:layout_toLeftOf="@+id/bReset" />
<Button
android:layout_weight="70"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/reset"
android:id="@+id/bReset"
android:layout_alignBottom="@+id/bCalculate" />
</LinearLayout>
</RelativeLayout>
答案 0 :(得分:0)
这些行
String stNumber = number.getText().toString(); //Here is bug
int numbResult = Integer.parseInt(stNumber);
String iterResult = result.getText().toString(); //And here is bug
int convResult = Integer.parseInt(iterResult);
在方法之外,这意味着它们将在onCreate()
或任何其他函数之前运行。因此,NPE
因为View
尚未初始化。它们应该被移动到一个函数中,并且可能是一个事件处理程序,例如OnClick()
。
关闭-主题强>
如果用户输入的数字无效或者根本没有输入任何内容,您可能还希望在解析int
时进行一些错误检查。将它们包裹在try/catch
中并抓住NumberFormatException
。