android 我必须测量最大高度,但错误在一个按钮,[重复]

qacovj5a  于 2023-05-05  发布在  Android
关注(0)|答案(1)|浏览(95)

此问题已在此处有答案

Getting a NumberFormatException from a numerical EditText field(7个回答)
9小时前关闭
我在高中的最后一个年级,他们让我作为一个项目,以衡量最大高度的抛物线拍摄。我已经有了这个程序,它工作正常,但错误发生时,我没有把信息在PlainText和程序关闭(Android Studio).我看到我可以用按钮“FloatingActionButton”做一些事情,但我不知道如何在我的Java代码中放置它。
下面是我的Java代码:

public class MainActivity extends AppCompatActivity {

    private EditText velocityEditText;
    private EditText angleEditText;
    private Button calculateButton;
    private TextView resultTextView;

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

        velocityEditText = findViewById(R.id.velocity_edit_text);
        angleEditText = findViewById(R.id.angle_edit_text);
       calculateButton=findViewById(R.id.calculateButton);
        resultTextView = findViewById(R.id.result_text_view);

        calculateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    double velocity = Double.parseDouble(velocityEditText.getText().toString());
                    double angle = Double.parseDouble(angleEditText.getText().toString());
                    double radians = Math.toRadians(angle);
                    double range = ((Math.pow(velocity, 2)) * (Math.pow(Math.sin(radians), 2))) / (2 * 9.81);
                    resultTextView.setText("Altura Máxima: " + String.format("%.2f", range) + " m");

            }
        });
    }
}

我的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:background="#EFECAF"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="sans-serif-black"
        android:text="Velocidad inicial (m/s):"
        android:textColor="#100F0F" />

    <EditText
        android:id="@+id/velocity_edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:textColor="#0E0E0E" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="sans-serif-black"
        android:text="Ángulo de lanzamiento (grados):"
        android:textColor="#121111" />

    <EditText
        android:id="@+id/angle_edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:textColor="#0E0E0E" />

    <Button
        android:id="@+id/calculateButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:backgroundTint="#FF9800"
        android:text="Calcular altura máxima" />

    <TextView
        android:id="@+id/result_text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:textAlignment="center"
        android:textColor="#100F0F"
        android:textSize="20sp"
        android:textStyle="italic" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/altura" />

</LinearLayout>

如果我没有正确地输入代码信息,我很抱歉,但这是我第一次在这里提问。
如果我将文本字段留空并单击按钮,则应用程序将崩溃。

zhte4eai

zhte4eai1#

您使用的编程语言是Java而不是Javascript(JS)。应用程序崩溃,因为如果没有输入文本,那么Double.parseDouble()函数将用于空字符串。要解决这个问题,请将calculateButton.setOnClickListener()替换为:

calculateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //Check if text fields are empty
            if (!velocityEditText.getText().toString().equals("") && !angleEditText.getText().toString().equals("")){
                    double velocity = Double.parseDouble(velocityEditText.getText().toString());
                    double angle = Double.parseDouble(angleEditText.getText().toString());
                    double radians = Math.toRadians(angle);
                    double range = ((Math.pow(velocity, 2)) * (Math.pow(Math.sin(radians), 2))) / (2 * 9.81);
                    resultTextView.setText("Altura Máxima: " + String.format("%.2f", range) + " m");
            }
            else{
             //Show message to user if no text is entered
             Toast.makeText(getApplicationContext(), "Please fill in the text fields", Toast.LENGTH_SHORT).show()
            }
        }
    });

在上面的代码中,我们首先检查字符串是否不为空,然后将字符串传递给Double.parseDouble()函数。如果文本字段为空,则向用户显示一条消息。

相关问题