无法获得editText整数值

时间:2017-07-25 12:42:50

标签: android

我是编程新手,所以我真的不知道如何解决这个问题或者为什么会这样做。

我正在创建一个应用程序,而在Main2Activity中,假设用户在EditText中插入一个值,然后在用户按下按钮后,该值将变为整数并被使用在数学运算中。

问题是,当我试用它时,当我按下MainActivity中的按钮将我带到Main2Activity时,应用程序崩溃了。

我将问题缩小到Main2Activity按钮中的编码范围,但并不是真的知道错误。

这是Main2Activity代码。你能帮助我吗?感谢。

package com.example.cabr.teste;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Main2Activity extends AppCompatActivity {

    public double valorhorasponta = 0;
    public double valorhorascheias = 0;
    public double valorhorasvazio = 0;

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

        TextView textView9 = (TextView) findViewById(R.id.textView9);
        TextView textView10 = (TextView) findViewById(R.id.textView10);
        TextView textView12 = (TextView) findViewById(R.id.textView12);
        TextView textView14 = (TextView) findViewById(R.id.textView14);
        final TextView textView11 = (TextView) findViewById(R.id.textView11);
        final TextView textView13 = (TextView) findViewById(R.id.textView13);
        final TextView textView15 = (TextView) findViewById(R.id.textView15);
        final TextView textView17 = (TextView) findViewById(R.id.textView17);

        final EditText editText1 = (EditText) findViewById(R.id.editText1);
        final EditText editText2 = (EditText) findViewById(R.id.editText2);
        final EditText editText3 = (EditText) findViewById(R.id.editText3);
        final EditText editText4 = (EditText) findViewById(R.id.editText4);

        Button button = (Button) findViewById(R.id.button);

        Intent i = getIntent();
        String valorpot1 = i.getStringExtra("valorpot1");
        String valorpot12 = i.getStringExtra("valorpot12");

        textView9.setText(valorpot1);


        if (valorpot12.equals("Tarifas de médias utilizações")){
            valorhorasponta = 0.3128;
            textView10.setText(String.valueOf(valorhorasponta));

            valorhorascheias = 0.1555;
            textView12.setText(String.valueOf(valorhorascheias));

            valorhorasvazio = 0.0862;
            textView14.setText(String.valueOf(valorhorasvazio));
        }
        if (valorpot12.equals("Tarifas de longas utilizações")){
            valorhorasponta = 0.2318;
            textView10.setText(String.valueOf(valorhorasponta));

            valorhorascheias = 0.1341;
            textView12.setText(String.valueOf(valorhorascheias));

            valorhorasvazio = 0.08;
            textView14.setText(String.valueOf(valorhorasvazio));
        }

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String valorquantponta1 = editText1.getText().toString();
                int valorquantponta = Integer.parseInt(valorquantponta1);

                String valorquantcheias1 = editText2.getText().toString();
                int valorquantcheias = Integer.parseInt(valorquantcheias1);

                String valorquantvazio1 = editText3.getText().toString();
                int valorquantvazio = Integer.parseInt(valorquantvazio1);

                String valorquantpot1 = editText4.getText().toString();
                int valorquantpot = Integer.parseInt(valorquantpot1);

                double valortotponta = valorhorasponta * valorquantponta;
                double valortotcheias = valorhorascheias * valorquantcheias;
                double valortotvazio = valorquantvazio * valorhorasvazio;

                textView11.setText(String.valueOf(valortotponta));
                textView13.setText(String.valueOf(valortotcheias));
                textView15.setText(String.valueOf(valortotvazio));
            }
        });

    }
}

2 个答案:

答案 0 :(得分:0)

您可以通过这种方式从EditText获取值

EditText editText =(EditText)findViewById(R.id.editText);

String string = editText.getText()。toString;

int int_value_from_editText = Integer.parseInt(string);

答案 1 :(得分:0)

如果意图没有额外内容NullPointerExceptionvalorpot1,您可以获得valorpot12,因为nullvalorpot1可能是valorpot12。将null对象与某个字符串值进行比较将引发异常。为了避免它:

取代:

String valorpot1 = i.getStringExtra("valorpot1");
String valorpot12 = i.getStringExtra("valorpot12");

使用:

String valorpot1 = i.hasExtra("valorpot1") ? i.getStringExtra("valorpot1") : "";
String valorpot12 = i.hasExtra("valorpot12") ? i.getStringExtra("valorpot12") : "";

另一个可能的应用程序崩溃可能是由于从String到Integer的不正确转换。您的EditText可以包含不能转换为整数的字母或双精度值。因此,您需要在使用前进行检查。

使用下面提供的convertToInt方法将String转换为Integer。在代码中将Integer.parseInt替换为convertToInt

private int convertToInt(String value)
{
    if (value.matches("^-?\\d+$"))
    {
        return Integer.parseInt(value);
    }
    else
    {
        return 0;
    }
}

您可以有其他可能导致应用程序崩溃的异常。如果您向我们提供Logcat报告,将会非常有用。