Android Studio - 很遗憾" appName"已经停止

时间:2015-03-02 13:52:35

标签: android onclicklistener

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

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();

            }

        }
    }
}

1 个答案:

答案 0 :(得分:0)

在阅读你的评论后,我明白了发生了什么。但首先,要获得堆栈跟踪,如果您使用Android Studio,则必须按 Alt-6 打开logcat并阅读应用程序中正在发生的事情。或者,您也可以单击下方栏中显示Android的按钮,然后选择显示logcat的选项卡,您将更容易调试。

关于您的错误 - 您有一个空指针异常。当程序期望设置变量时,会发生空指针,但不是。发生这个特殊的空指针是因为当你单击按钮时EditText中没有值 - 它为null - 然后你将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中的值是否实际上是一个数字,因为如果你试图解析单词&#34; hello world&#34;你会得到一个NumberFormatException。

希望这有帮助。