2015-03-02 110 views
0

我试图在Android Studio中构建一个2货币转换器应用程序(GNConverter)。我用onClickLister()创建了一个按钮来转换值或显示Toast消息。当我在手机上运行时,收到消息“不幸GNConverter已停止”。Android Studio - 不幸的是,“appName”已停止

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:paddingTop="30dp" 
    android:paddingBottom="16dp" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/PromptTextView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Nigeria Naira (NGN)." 
     android:textSize="20sp" 
     android:layout_marginBottom="20dp"/> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:inputType="numberDecimal" 
     android:layout_marginBottom="20dp" 
     android:hint="0" 
     android:textSize="50sp"/> 

    <TextView 
     android:id="@+id/PromptTextView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Ghanaian New Cedi (GHS)." 
     android:textSize="20sp" 
     android:layout_marginBottom="20dp"/> 

    <EditText 
     android:id="@+id/editText2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/PromptTextView" 
     android:inputType="numberDecimal" 
     android:layout_marginBottom="20dp" 
     android:hint="0" 
     android:textSize="50sp"/> 

    <Button 
     android:id="@+id/btnConvert" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="100dp" 
     android:text="Convert"/> 

</LinearLayout> 

我的活动课:

public class GNConverter extends ActionBarActivity implements View.OnClickListener{ 
    private EditText text1; 
    private EditText text2; 
    private Button btnConvert; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gnconverter); 

    text1 = (EditText) findViewById(R.id.editText1); 
    text2 = (EditText) findViewById(R.id.editText2); 
    btnConvert = (Button) findViewById(R.id.btnConvert); 

    btnConvert.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    if (v.getId()==R.id.btnConvert){ 
     double a = Double.parseDouble(text1.getText().toString()); 
     if (a>0){ 
      double b = a * 0.016694; 
      text2.setText(String.valueOf(b)); 
     } 
     else if (a<=0) { 
      Toast.makeText(GNConverter.this, "Enter a Value!", Toast.LENGTH_LONG).show(); 

      } 

     } 
    } 
} 
+3

我们可以得到堆栈跟踪吗?编辑:youre可能不会在edittext中输入有效的双倍数。我建议您先将其过滤掉。 – jvrodrigues 2015-03-02 13:54:44

+0

@jvrodrigues我是新的android工作室,请如何获得堆栈跟踪。此外,该应用程序正在运行,但是当该字段为空时,我按下按钮 - ***转换*** ,.它崩溃而不是显示吐司消息。 – StephAn 2015-03-02 15:36:36

回答

0

阅读您的意见,我明白了事情的原委后。首先,要获得堆栈跟踪,如果您使用的是Android Studio,则必须按Alt-6才能打开logcat并阅读应用程序中正在发生的事情。或者,您也可以单击下方栏上的Android按钮,然后选择标记为logcat的选项卡,您将可以更轻松地进行调试。

关于你的错误 - 你得到一个空指针异常。空指针在程序期望变量被设置时发生,但不是。这个特殊的空指针会发生,因为当你点击按钮的时候EditText中没有值 - 它是空的 - 那么你将null值传递给方法Double.parseDouble(),它需要一个Double。

要试图解析它之前避免这种情况,你需要检查,如果确实有东西在编辑文本:

@Override 
public void onClick(View v) { 
    if (v.getId()==R.id.btnConvert){ 

     if (text1.getText().toString() != null){ 
      try{ 
       double a = Double.parseDouble(text1.getText().toString()); 

       double b = a * 0.016694; 
       text2.setText(String.valueOf(b)); 
      }catch(NumberFormatException nfe){ 
        Toast.makeText(GNConverter.this, "Enter a valid Value!",   Toast.LENGTH_LONG).show(); 
      } 
     }else if (a<=0) { 
      Toast.makeText(GNConverter.this, "Enter a Value!", Toast.LENGTH_LONG).show(); 

     } 

    } 
} 

我还添加了一个try/catch检查,在一个丑陋的和原始的方式,如果EditText中的值实际上是一个数字,因为如果试图解析“hello world”这个词,你会得到一个NumberFormatException。

希望这会有所帮助。

+0

太棒了!你可以标记它作为答案,以帮助其他人有同样的问题。 – jvrodrigues 2015-03-04 16:20:55

相关问题