DecimalFormat问题抛出StackOverFlowError?

时间:2011-02-08 06:59:20

标签: java android

我有一个编辑文字。我想在其中输入小数值。

这是我输入第一个号码的时候。它应该是这样的:.01

然后我输入了第二个号码。它应该是这样的:.12

然后是第三个。它应该是这样的:1.23

它会像这样....如何在 Android平台中实现此方案。有什么想法吗?

编辑:

我试过了。但是当我将字符串附加到EditText时,我得到了StackOverFlowError。我在下面发布了我的代码:

amount.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable s) {
                try {
                    if (s.length() == 1) {
                        Float f = Float.parseFloat(s.toString()) / 100;
                        System.out.println(String.valueOf(f));
                        amount.setText("");
                        amount.append(String.valueOf(f));//getting stackoverflow error here
                    } else if (s.length() > 1) {
                        String str = s.toString().replace(".", "");
                        Float f = Float.parseFloat(str) / 100;
                        System.out.println(String.valueOf(f));
                        amount.setText("");
                        amount.append(String.valueOf(f));
                    }
                } catch (Exception e) {

                }
            }

            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }

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

1 个答案:

答案 0 :(得分:1)

看,你正在为一个元素实现一个TextChangedKListener,你要在其中更改元素文本。

所以,在这一行

amount.setText("");
amount.append(String.valueOf(f))

正在调用您的TextWatcher实现(正如您可以看到herehere)。

正如您在第二个链接上看到的那样,afterTextChanged方法的API文档会警告您进入无限循环的风险:

  

小心不要陷入无限循环,因为你所做的任何改变都会导致这个方法再次被递归调用

TextWatcher API文档中的自我afterTextChanged说明建议使用此方法进行处理:

  

你没有被告知改变的地点   放置因为其他afterTextChanged()   方法可能已经取得了其他方法   更改并使抵消无效。   但如果你需要知道, 你可以   使用setSpan(Object,int,int,int)   onTextChanged(CharSequence,int,int,   int)标记你的地方,然后看   从这里开始跨度