错误java.lang.StackOverflower错误:堆栈大小为8MB

错误java.lang.StackOverflower错误:堆栈大小为8MB,java,android,Java,Android,我得到了一个eror堆栈大小。我不知道这个错误。因为当我在另一个android工作室编译这个项目时。它很好用。但是现在我不再工作了,我犯了这个错误。当我在无线电组中选择一个选项时,将显示此错误。I hv 2无线电组和编辑文本,当我从一个无线电组中选择数据时,另一个无线电组和编辑文本中的另一个选项将被清除。但是我在setOnCheckedChangeListener函数中的clear部分出错。请帮帮我。非常感谢。 ChargeFragment.java public class ChargeFra

我得到了一个eror堆栈大小。我不知道这个错误。因为当我在另一个android工作室编译这个项目时。它很好用。但是现在我不再工作了,我犯了这个错误。当我在无线电组中选择一个选项时,将显示此错误。I hv 2无线电组和编辑文本,当我从一个无线电组中选择数据时,另一个无线电组和编辑文本中的另一个选项将被清除。但是我在setOnCheckedChangeListener函数中的clear部分出错。请帮帮我。非常感谢。 ChargeFragment.java

public class ChargeFragment extends Fragment {
CustomerPreference customerPreference;
DiscountPeferences discountPeferences;
CartPreference cartPreference;
SessionManagement sessionManagement;
DatabaseHandler db;
List<CartModel> cart;
List<Discount> dp;

Fragment fragment = null;

Button Charge,Cancel;
RadioButton rb1,rb2,rbEdc,rbOther,rbPay1,rbPay2,rbPay3;
RadioGroup rg,rOther,rgPay;
TextView tvTotal;
EditText edCard,edCash;
public ChargeFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootview = inflater.inflate(R.layout.layout_charge, container, false);

    sessionManagement = new SessionManagement(getActivity());
    db = new DatabaseHandler(getActivity());
    cartPreference = new CartPreference();
    customerPreference = new CustomerPreference(getActivity());
    discountPeferences = new DiscountPeferences();
    cart = cartPreference.getFavorites(getActivity());
    dp = discountPeferences.getFavorites(getActivity());

    Bundle bun=this.getArguments();
    final int total=bun.getInt("total");

    tvTotal = (TextView) rootview.findViewById(R.id.tvTotal);
    rg = (RadioGroup) rootview.findViewById(R.id.radioChoose);
    rb1 = (RadioButton) rootview.findViewById(R.id.rd1);
    rb2 = (RadioButton) rootview.findViewById(R.id.rd2);
    rOther = (RadioGroup) rootview.findViewById(R.id.radioOther);
    rgPay = (RadioGroup) rootview.findViewById(R.id.rgPay);
    rbEdc = (RadioButton) rootview.findViewById(R.id.rdEdc);
    rbOther = (RadioButton) rootview.findViewById(R.id.rdOthr);
    rbPay1 = (RadioButton) rootview.findViewById(R.id.rdPay1);
    rbPay2 = (RadioButton) rootview.findViewById(R.id.rdPay2);
    rbPay3 = (RadioButton) rootview.findViewById(R.id.rdPay3);
    Charge = (Button) rootview.findViewById(R.id.buttonCharge);
    Cancel = (Button) rootview.findViewById(R.id.buttonCancel);
    edCard = (EditText) rootview.findViewById(R.id.edCard);
    edCash = (EditText) rootview.findViewById(R.id.edCash);


    int x = Math.round((total + 900)/1000 * 1000);
    int y = Math.round((total + 9000)/10000 * 10000);
    rbPay1.setText(""+total);
    rbPay2.setText(""+x);
    rbPay3.setText(""+y);

    final DecimalFormat kursIndonesia = (DecimalFormat) DecimalFormat.getCurrencyInstance();
    DecimalFormatSymbols formatRp = new DecimalFormatSymbols();
    formatRp.setCurrencySymbol("Rp. ");
    formatRp.setMonetaryDecimalSeparator(',');
    formatRp.setGroupingSeparator('.');
    kursIndonesia.setDecimalFormatSymbols(formatRp);

    tvTotal.setText(""+kursIndonesia.format(total));

    edCard.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            rOther.clearCheck();
            rbEdc.setTextColor(Color.RED);
            rbOther.setTextColor(Color.RED);
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });

    edCash.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            rg.clearCheck();
            rb1.setTextColor(Color.RED);
            rb2.setTextColor(Color.RED);

            rOther.clearCheck();
            rbEdc.setTextColor(Color.RED);
            rbOther.setTextColor(Color.RED);

        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });

    rgPay.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i) {
            if(rbPay1.isChecked())
                edCash.setText(rbPay1.getText().toString());
            if(rbPay2.isChecked())
                edCash.setText(rbPay2.getText().toString());
            if(rbPay3.isChecked())
                edCash.setText(rbPay3.getText().toString());
        }
    });

    rOther.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i) {

            rgPay.clearCheck();
            //edCash.setText("");
            if (rbEdc.isChecked()) {
                rbEdc.setTextColor(Color.WHITE);
                rbOther.setTextColor(Color.RED);

            }
            if (rbOther.isChecked()){
                rbEdc.setTextColor(Color.RED);
                rbOther.setTextColor(Color.WHITE);

            }
        }
    });

    rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i) {

           // rOther.clearCheck();
            rbEdc.setTextColor(Color.RED);
            rbOther.setTextColor(Color.RED);
            edCash.setText("");
            if (rb1.isChecked()) {
                rb1.setTextColor(Color.WHITE);
                rb2.setTextColor(Color.RED);

            }
            if (rb2.isChecked()){
                rb1.setTextColor(Color.RED);
                rb2.setTextColor(Color.WHITE);

            }
        }
    });

    Cancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            getActivity().onBackPressed();
        }
    });
    Charge.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            int last=1;

            String method = "", pay = "";
            if (!edCash.getText().toString().equals("")) {
                method = "Cash";
                pay = edCash.getText().toString();
            } else if (!edCard.getText().toString().equals("")) {
                method = "Debit/Credit";
                pay = "" + total;
            } else if (edCard.getText().toString().equals("") && edCash.getText().toString().equals("")) {
                if (rbEdc.isChecked()) {
                    method = "EDC";
                } else if (rbOther.isChecked()) {
                    method = "Other";
                }
                pay = "" + total;
            }
            String cardNo = "";
            if (edCard.getText().equals(""))
                cardNo = "";
            else {
                cardNo = edCard.getText().toString();
            }

            if(method.equals(""))
            {
                Toast.makeText(getActivity(),"Choose Payment Method Please !",Toast.LENGTH_SHORT).show();
            }
            else {

                String discID = "";
                String discID2 = "";
                int listDiscCount = db.getDiscCount();
                if (dp != null) {
                    discID = db.getMaxIdListDiscount();
                    if (dp.size() > 0) {
                        if (listDiscCount > 0) {
                            discID2 = generateListDiscId(Integer.parseInt(discID.substring(discID.length() - 3)) + 1);
                        } else {
                            discID2 = generateListDiscId(1);
                        }
                        for (Discount d : dp) {
                            String pkDisc;
                            if (listDiscCount == 0)
                                pkDisc = generateIdListDiscPk(1);
                            else {
                                String lastPkDisc = db.getMaxPkIdListDiscount();
                                pkDisc = generateIdListDiscPk(Integer.parseInt(lastPkDisc.substring(lastPkDisc.length() - 3)) + 1);
                            }
                            list_disc_nota ld = new list_disc_nota(pkDisc, discID2, d.getId());
                            db.addListDiscNota(ld);
                        }
                    }
                }

                insertItemNota();


                int total1 = 0;
                for (CartModel cm : cart) {
                    total1 = total1 + Integer.parseInt(cm.getHarga());
                }
                if (dp != null) {
                    if (dp.size() > 0) {
                        InsertNota(method, discID2, cardNo, "" + total1, "" + total);
                    } else
                        InsertNota(method, "0", cardNo, "" + total1, "" + total);
                } else {
                    InsertNota(method, "0", cardNo, "" + total1, "" + total);
                }


                int change = Integer.parseInt(pay) - total;
                String nota = db.getLastNotaID();
                if(method.equals("Debit/Credit"))
                {
                    method="Card";
                }
                showPrint(nota, total, Integer.parseInt(pay), change,method);
            }
        }
    });
    return rootview;
}

实际上,代码就像一个while循环,没有中断条件。 在edCash的checked change listener中,您正在调用rg.clearCheck(),inturn将在rg的CheckChange lsitener中调用它。在rg的on checked change listener中,您正在为edCach设置文本,而edCach将调用edCash的on text change listner。对于编程更改,在这些小部件的null和您的listner之间切换,以避免循环

例如:

@Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            rg.setOnCheckedChangeListner(null);
            rg.clearCheck();
            rg.setOnCheckedChangeListner(yourCheckBoxListner);
            rbEdc.setTextColor(Color.RED);
            rbOther.setTextColor(Color.RED);
        }
And for rg
  @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i) {

        rbEdc.setTextColor(Color.RED);
        rbOther.setTextColor(Color.RED);
        edCash.setonTextChangeListener(null);
        edCash.setText("");
        edCash.setOnTextChangeListner(youTextChangeListner);

rg.setoncheckChangeListner(yourCheckBoxListner);

WHERE yourCheckBoxListner would be like.-->
    RadioGroup.OnCheckChangeListner yourCheckBoxListner = new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) { 
       //yourlogic  like below. 
     rbEdc.setTextColor(Color.RED);
                rbOther.setTextColor(Color.RED);
                edCash.setonTextChangeListener(null);
                edCash.setText("");
                edCash.setOnTextChangeListner(youTextChangeListner);
    }

对edCash也要这样做。

实际上,代码就像一个没有中断条件的while循环。 在edCash的checked change listener中,您正在调用rg.clearCheck(),inturn将在rg的CheckChange lsitener中调用它。在rg的on checked change listener中,您正在为edCach设置文本,而edCach将调用edCash的on text change listner。对于编程更改,在这些小部件的null和您的listner之间切换,以避免循环

例如:

@Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            rg.setOnCheckedChangeListner(null);
            rg.clearCheck();
            rg.setOnCheckedChangeListner(yourCheckBoxListner);
            rbEdc.setTextColor(Color.RED);
            rbOther.setTextColor(Color.RED);
        }
And for rg
  @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i) {

        rbEdc.setTextColor(Color.RED);
        rbOther.setTextColor(Color.RED);
        edCash.setonTextChangeListener(null);
        edCash.setText("");
        edCash.setOnTextChangeListner(youTextChangeListner);

rg.setoncheckChangeListner(yourCheckBoxListner);

WHERE yourCheckBoxListner would be like.-->
    RadioGroup.OnCheckChangeListner yourCheckBoxListner = new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) { 
       //yourlogic  like below. 
     rbEdc.setTextColor(Color.RED);
                rbOther.setTextColor(Color.RED);
                edCash.setonTextChangeListener(null);
                edCash.setText("");
                edCash.setOnTextChangeListner(youTextChangeListner);
    }

edCash也可以这样做。

我们这里可以只提供相关代码吗?视图如何-您的视图是否可能包含自身?我在片段中创建了它,因此视图位于oncreateview中。这是我唯一放置代码-@M.prokhorovac的地方根据例外情况和您问题的答案,实际的代码示例应该是10到15行,而不是这个。请在以后的问题中参考。我们能否在此仅提供相关代码?视图如何-您的视图是否可能包含自身?我在片段中创建了它,因此视图位于oncreateview中。这是我唯一放置代码-@M.prokhorovac的地方根据例外情况和您问题的答案,实际的代码示例应该是10到15行,而不是这个。请在以后的问题中参考。你知道如何修复它吗?但我希望在我选择另一个广播组时清楚地知道。嗯,这是不是意味着在我更改eDiText或radiogroup时无法清除另一个?你知道如何修复它吗?但我希望在选择另一个广播组时能够清除它。嗯,这是不是意味着当我更改eDiText或radiogroup时无法清除另一个?