有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java My app在输入值以编辑文本时崩溃,并且没有显示正确的值

我是Android Studio的新手。我已经通过了官方开发者。安卓com training和我决定创建一个名为“杂货店+”的简单新应用程序,用户将在其中输入特定商品的价格和数量,应用程序将显示总金额

enter image description here

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

1-当我试图进入第一个应用程序时,我的应用程序崩溃

enter image description here

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

2-即使在上述黑客攻击之后,我的应用程序也不会在“总计”上显示任何内容

请帮忙:(((

package com.amostrone.akash.grocery;

import 安卓.support.v7.app.AppCompatActivity; import 安卓.os.Bundle; import 安卓.view.View; import 安卓.widget.EditText; import 安卓.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 }

共 (2) 个答案

  1. # 2 楼答案

    查看您的代码,您似乎正在触发EditText单击事件时获取和计算值(通过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();
            }
        }