无法解析方法setText() - Android Studio开发

时间:2016-10-20 02:55:54

标签: java android android-studio

我是一个完整的java编程菜鸟,并且像往常一样把自己投入到深处(我似乎以这种方式获得了更好的结果)。

我正在使用Android Studio创建Android应用,并且在我的Java代码中遇到了错误。

我已经搜索了答案,但答案都是非常具体的实际代码,所以找不到我自己的答案。

我的问题出现在我的MainActivity.java中,我使用TextWatcher作为NumberTextWatcher,它将在Stack Overflow上从this answer转换并设置任何输入为十进制货币(因为用户将输入价格)。 / p>

问题是我收到了错误:

  

无法解析方法setText()

以下是错误所在的代码(我用//<标记了错误 - 这里它会抛出错误。):

   public class NumberTextWatcher implements TextWatcher {

    private final DecimalFormat df;
    private final DecimalFormat dfnd;
    private final EditText et;
    private boolean hasFractionalPart;
    private int trailingZeroCount;

    NumberTextWatcher(EditText inputPricePerOz, String pattern) {
        df = new DecimalFormat(pattern);
        df.setDecimalSeparatorAlwaysShown(true);
        dfnd = new DecimalFormat("#,###.00");
        this.et = inputPricePerOz;
        hasFractionalPart = false;
    }

    @Override
    public void afterTextChanged(Editable s) {
        et.removeTextChangedListener();

        if (s != null && !s.toString().isEmpty()) {
            try {
                int inilen, endlen;
                inilen = et.getText().length();
                String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "").replace("$","");
                Number n = df.parse(v);
                int cp = et.getSelectionStart();
                if (hasFractionalPart) {
                    StringBuilder trailingZeros = new StringBuilder();
                    while (trailingZeroCount-- > 0)
                        trailingZeros.append('0');
                    et.setText();  //<- Here it throws an error.
                } else {
                    et.setText();  //<- Here it throws an error.
                }
                et.setText();  //<- Here it throws an error.
                endlen = et.getText().length();
                int sel = (cp + (endlen - inilen));
                if (sel > 0 && sel < et.getText().length()) {
                    et.setSelection(sel);
                } else if (trailingZeroCount > -1) {
                    et.setSelection(et.getText().length() - 3);
                } else {
                    et.setSelection(et.getText().length());
                }
            } catch (NumberFormatException | ParseException e) {
                e.printStackTrace();
            }
        }

        et.addTextChangedListener(this);
    }

我对Java知之甚少,我不知道为什么会出现这个错误,虽然我认为使用setText()方法设置文本会很简单。 任何帮助将非常感谢

3 个答案:

答案 0 :(得分:1)

语法错误:它应该像下面的任何一个

        et.setText("Text to set in editext");
OR
        et.setText(R.string.app_name);
OR
        et.setText("Text to set in editext", BufferType.EDITABLE);

参考API文档: https://developer.android.com/reference/android/widget/EditText.html#setText(java.lang.CharSequence, android.widget.TextView.BufferType)
&安培; https://developer.android.com/reference/android/widget/TextView.html#setText(java.lang.CharSequence)

答案 1 :(得分:0)

如果查看EditText的文档,您将看到该方法采用字符串和缓冲区类型。所以你需要添加你想要改变的文本和buffertype。你可能想要TextView.BufferType.EDITABLE。

e.g。

et.setText("Example text", TextView.BufferType.EDITABLE);

点击此处https://developer.android.com/reference/android/widget/EditText.html

答案 2 :(得分:0)

所以我弄清楚为什么错误被抛出,这是一个我无法解释的简单错误,但当我复制并粘贴代码时,它不知道错过了复制某些部分,或者失败了android studio / gradle改变了我的代码,这是固定代码:

        @Override
    public void afterTextChanged(Editable s) {
        et.removeTextChangedListener(this);  //<- also fixed error an error here

        if (s != null && !s.toString().isEmpty()) {
            try {
                int inilen, endlen;
                inilen = et.getText().length();
                String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "").replace("$","");
                Number n = df.parse(v);
                int cp = et.getSelectionStart();
                if (hasFractionalPart) {
                    StringBuilder trailingZeros = new StringBuilder();
                    while (trailingZeroCount-- > 0)
                        trailingZeros.append('0');
                    et.setText(df.format(n) + trailingZeros.toString());  //<- Fixed error
                } else {
                    et.setText(dfnd.format(n));  //<- Fixed error
                }
                et.setText("$".concat(et.getText().toString()));  //<- Fixed error
                endlen = et.getText().length();
                int sel = (cp + (endlen - inilen));
                if (sel > 0 && sel < et.getText().length()) {
                    et.setSelection(sel);
                } else if (trailingZeroCount > -1) {
                    et.setSelection(et.getText().length() - 3);
                } else {
                    et.setSelection(et.getText().length());
                }
            } catch (NumberFormatException | ParseException e) {
                e.printStackTrace();
            }
        }

        et.addTextChangedListener(this);
    }