单击我的按钮时,应用程序崩溃而未在文本字段中输入任何内容

时间:2018-01-09 17:02:28

标签: android

我创建了我的第一个简单货币转换器应用程序,它以INR作为输入,并以美元作为Toa​​st提供金额。当金额作为输入并且按下“转换”按钮时,应用程序正常工作并返回正确的结果,但是一旦没有给出输入,然后按下“转换”按钮,应用程序崩溃。

以下是.xml文件的代码:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="21dp"
        android:background="@color/colorPrimary"
        android:fontFamily="monospace"
        android:padding="20sp"
        android:text="INR to USD converter"
        android:textColor="@android:color/background_light"
        android:textSize="18sp" />

    <Button
        android:id="@+id/button"
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/imageView"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="15dp"
        android:background="@color/colorPrimary"
        android:onClick="convert"
        android:text="Convert" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="29dp"
        app:srcCompat="@drawable/currency" />

    <EditText
        android:id="@+id/amount"
        style="@style/Widget.AppCompat.Light.AutoCompleteTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="34dp"
        android:ems="10"
        android:hint="Amount(INR)"
        android:inputType="numberDecimal" />

</RelativeLayout>

主要活动的代码:

package com.example.asus.currencyconverter;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    public void convert(View view){
        EditText amount =  (EditText) findViewById(R.id.amount);
        Double amountDouble= Double.parseDouble(amount.getText().toString());
        Double dollar= amountDouble * 0.01575;
        Toast.makeText(MainActivity.this, "$" + dollar.toString(), Toast.LENGTH_LONG).show();
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main1);
    }
}

我做错了什么?

2 个答案:

答案 0 :(得分:0)

这是因为当您有空EditText并致电getText()时,它会返回空字符串,您将其添加到Double.parseDouble(),这会引发NumberFormatException。你想先检查你的String是空的。

public void convert(View view) {
    EditText amount =  (EditText) findViewById(R.id.amount);
    String textAmount = amount.getText().toString();
    if (!TextUtils.isEmpty(textAmount)) {
        Double amountDouble = Double.parseDouble(textAmount);
        Double dollar= amountDouble * 0.01575;
        Toast.makeText(MainActivity.this, "$" + dollar.toString(), Toast.LENGTH_LONG).show();
    }
}

答案 1 :(得分:0)

替换为此代码:

public class MainActivity extends AppCompatActivity {

    public EditText amount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main1);
        amount = (EditText) findViewById(R.id.amount);
    }

    public void convert(View view) {
        String text = amount.getText().toString();
        if (!text.isEmpty()) {
            Double amountDouble = Double.parseDouble(text);
            Double dollar = amountDouble * 0.01575;
            Toast.makeText(MainActivity.this, "$"+dollar.toString(), Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(MainActivity.this, "Please enter a valid value", Toast.LENGTH_LONG).show();
        }
    }
}

如果值为空,它将显示一个toast来输入值。