我是一个完整的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()方法设置文本会很简单。 任何帮助将非常感谢
答案 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);
}