2014-03-05 26 views
-3

我有非常简单的代码,但它没有工作。我的应用程序崩溃,我得到这个错误:Android:NullPointerException,将EditText转换为字符串

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 

我完全知道错误在哪里,但我不知道如何摆脱它们。我评论了这两个广告牌。你帮助我吗?

我的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

[什么是NullPointerException?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception) –

回答

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