java - 输入数值以编辑文本时,我的应用程序崩溃了,并且它没有显示正确的值

标签 java android android-studio crash

我是Android Studio的新手。我经过了正式的developer.android.com培训,因此决定创建一个名为Grocery +的新的简单应用程序,用户可以在其中输入特定商品的价格和数量,并且该应用程序将显示总金额。

enter image description here

我已经完成了所有基于UI的工作,然后今天我转向编程。我是一位经验丰富的Java程序员。我还完成了所有工作,但:

1- 尝试输入第一个时,我的应用程序崩溃。

enter image description here

然后,我必须先输入其他任何值,然后再输入第一个值。

2- ,即使在遭到上述黑客攻击后,我的应用也未在“总计”中显示任何内容

请帮助:(((

package com.amostrone.akash.grocery;

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

public class MainActivity extends AppCompatActivity {

    static int Quantity[] = new int[4];
    static float Price[] = new float[4];
    public static double total=0;
    static TextView txtValue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtValue = (TextView) findViewById(R.id.txtExample);
    }
    ///////////             QUANTITY
                public void input_Quantity(View view) {
                    EditText x = (EditText) findViewById(R.id.editQuantity);
                    calc();
                }
                public void input_Quantity2(View view) {
                    EditText x = (EditText) findViewById(R.id.editQuantity2);
                    Quantity[1] = Integer.parseInt(x.toString());
                    calc();
                }
                public void input_Quantity3(View view) {
                    EditText x = (EditText) findViewById(R.id.editQuantity3);
                    Quantity[2] = Integer.parseInt(x.toString());
                    calc();
                }
                public void input_Quantity4(View view) {
                    EditText x = (EditText) findViewById(R.id.editQuantity4);
                    Quantity[3] = Integer.parseInt(x.toString());
                    calc();
                }
                public void input_Quantity5(View view) {
                    EditText x = (EditText) findViewById(R.id.editQuantity5);
                    Quantity[4] = Integer.parseInt(x.toString());
                    calc();
                }
    ///////////////          Quantity



    //////////////           Price
                public void input_Price(View view) {
                    EditText x = (EditText) findViewById(R.id.editPrice);
                    Price[0] = Float.parseFloat(x.toString());
                    calc();
                }
                public void input_Price2(View view) {
                    EditText x = (EditText) findViewById(R.id.editPrice2);
                    Price[1] = Float.parseFloat(x.toString());
                    calc();
                }
                public void input_Price3(View view) {
                    EditText x = (EditText) findViewById(R.id.editPrice3);
                    Price[2] = Float.parseFloat(x.toString());
                    calc();
                }
                public void input_Price4(View view) {
                    EditText x = (EditText) findViewById(R.id.editPrice4);
                    Price[3] = Float.parseFloat(x.toString());
                    calc();
                }
                public void input_Price5(View view) {
                    EditText x = (EditText) findViewById(R.id.editPrice5);
                    calc();
                }
    /////////////            Price

   ///////////////           Calculate
    public static void calc()
    {
        for(int i=0;i<=4;i++)
            total += (Quantity[i] * Price[i]);
        String str = Double.toString(total);
        txtValue.setText(str);
    }
    //////////////           Calculate }

最佳答案

查看您的代码,看来您正在触发EditText值获取和click事件的计算(通过xml)。这样无法正常工作,因为会立即触发它们。解决此问题的方法之一是采用TextWatcher路由。检查以下构建的代码,我也对其进行了重构(现在应该更不容易出现内存泄漏):

public double mTotal;
    private TextView mTextView;

    private EditText[] mQuantityEditTexts = new EditText[5];
    private EditText[] mPriceEditTexts = new EditText[5];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.txtExample);

        mQuantityEditTexts[0] = (EditText) findViewById(R.id.editQuantity);
        mQuantityEditTexts[1] = (EditText) findViewById(R.id.editQuantity2);
        mQuantityEditTexts[2] = (EditText) findViewById(R.id.editQuantity3);
        mQuantityEditTexts[3] = (EditText) findViewById(R.id.editQuantity4);
        mQuantityEditTexts[4] = (EditText) findViewById(R.id.editQuantity5);

        mPriceEditTexts[0] = (EditText) findViewById(R.id.editPrice);
        mPriceEditTexts[1] = (EditText) findViewById(R.id.editPrice2);
        mPriceEditTexts[2] = (EditText) findViewById(R.id.editPrice3);
        mPriceEditTexts[3] = (EditText) findViewById(R.id.editPrice4);
        mPriceEditTexts[4] = (EditText) findViewById(R.id.editPrice5);

        for (int i = 0; i < 5; i++) {
            mQuantityEditTexts[i].addTextChangedListener(mTextWatcher);
            mPriceEditTexts[i].addTextChangedListener(mTextWatcher);
        }
    }

    private TextWatcher mTextWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }


        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            calc();
        }


        @Override
        public void afterTextChanged(Editable s) {
        }
    };

    public void calc()
    {
        try {
            for (int i = 0; i <= 4; i++)
                mTotal += Integer.parseInt(mQuantityEditTexts[i].getText().toString()) *
                        Double.parseDouble(mPriceEditTexts[i].getText().toString());

            String str = Double.toString(mTotal);
            mTextView.setText(str);
        } catch (NumberFormatException e) {
            Toast.makeText(this, "WTF! Enter valid numbers!", Toast.LENGTH_SHORT).show();
        }
    }

关于java - 输入数值以编辑文本时,我的应用程序崩溃了,并且它没有显示正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39304171/

相关文章:

java - 如何更改来自不同类的变量?

java - 已检查和未检查的异常和设计思想

android - 如何将应用栏布局的内容水平对齐

java - Android studio 处理多个用户。如何修改布局的可点击参数?

android - 新的 UNEXPECTED TOP-LEVEL EXCEPTION 。再次出现在《SOF》中。

Java后台 worker : Scope of Widget to be updated unclear

java - Android ListView 数组索引越界异常

java - android :onClick and View. OnClickListener 之间的关系

添加了 android:exported 但仍然出现错误 需要针对 Android 12 及更高版本的应用程序才能为 android:exported 指定显式值

Android Studio 上未安装 Android SDK