Java EditText-setText()方法不工作-StackOverFlow异常
我在想为什么这行代码会出现StackOverFlow异常时遇到了一些问题:Java EditText-setText()方法不工作-StackOverFlow异常,java,android,android-edittext,Java,Android,Android Edittext,我在想为什么这行代码会出现StackOverFlow异常时遇到了一些问题: mPassword.setText(phone); 我试图格式化一个数字,而用户正在键入它,并采取格式化的数字,并将其设置为EditText小部件。我如何解决这个问题 代码如下: @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //Toast.makeText
mPassword.setText(phone);
我试图格式化一个数字,而用户正在键入它,并采取格式化的数字,并将其设置为EditText小部件。我如何解决这个问题
代码如下:
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Toast.makeText(getApplicationContext(), "In onTextChanged() Method", Toast.LENGTH_SHORT).show();
if (s.length() != 0) {
switch (et.getId()) {
case R.id.etUsername: {
}
break;
case R.id.etPassword: {
phone = formatPhoneNumber(phone);
Log.i("PHONE", "Phone NUMB IS:"+phone);
mPassword.setText(phone); //THE ERROR HAPPENS HERE
}
}
}
}
public String formatPhoneNumber(String phoneNumber) {
Toast.makeText(getApplicationContext(), "In formatPhoneNumber() Method", Toast.LENGTH_SHORT).show();
final StringBuffer sbPhone = new StringBuffer(phoneNumber);
if (sbPhone.length() == 9) {
//phoneNumber.substring(8, '-');
//phoneNumber.insert(8, '-');
if (sbPhone.indexOf("-") == -1) {
sbPhone.insert(8, "-");
}
}
else if (sbPhone.length() == 8) {
//phoneNumber.replace("-", "");
if (sbPhone.indexOf("-") != -1) {
sbPhone.delete(sbPhone.indexOf("-"), sbPhone.indexOf("-"));
}
}
}
以下是错误:
03-17 09:16:42.844: E/AndroidRuntime(22047): FATAL EXCEPTION: main
03-17 09:16:42.844: E/AndroidRuntime(22047): java.lang.StackOverflowError
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.text.SpannableStringBuilder.getChars(SpannableStringBuilder.java:913)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.text.TextUtils.getChars(TextUtils.java:81)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.text.TextUtils.getChars(TextUtils.java:81)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.text.MeasuredText.setPara(MeasuredText.java:117)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.text.StaticLayout.generate(StaticLayout.java:264)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.text.DynamicLayout.reflow(DynamicLayout.java:324)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.text.DynamicLayout.<init>(DynamicLayout.java:174)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.makeSingleLayout(TextView.java:7106)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.makeNewLayout(TextView.java:6955)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.checkForRelayout(TextView.java:7551)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4410)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844: E/AndroidRuntime(22047): at com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844: E/AndroidRuntime(22047): at com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844: E/AndroidRuntime(22047): at com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844: E/AndroidRuntime(22047): at com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844: E/AndroidRuntime(22047): at com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844: E/AndroidRuntime(22047): at com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844: E/AndroidRuntime(22047): at com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844: E/AndroidRuntime(22047): at com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844: E/AndroidRuntime(22047): at android.widget.Text
03-17 09:16:42.844:E/AndroidRuntime(22047):致命异常:main
03-17 09:16:42.844:E/AndroidRuntime(22047):java.lang.StackOverflower错误
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.text.SpannableStringBuilder.getChars(SpannableStringBuilder.java:913)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.text.TextUtils.getChars(TextUtils.java:81)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.text.TextUtils.getChars(TextUtils.java:81)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.text.MeasuredText.setPara(MeasuredText.java:117)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.text.StaticLayout.generate(StaticLayout.java:264)上
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.text.dynamiclayot.reflow(dynamiclayot.java:324)上
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.text.DynamicLayout.(DynamicLayout.java:174)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.TextView.MakeSingelLayout(TextView.java:7106)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.TextView.makeNewLayout(TextView.java:6955)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.TextView.checkForRelayout(TextView.java:7551)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4410)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4247)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.EditText.setText(EditText.java:108)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4222)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于com.example.edittexttest.MainActivity$InputValidator.onTextChanged(MainActivity.java:91)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.TextView.sendOnTextChanged(TextView.java:8430)
03-17 09:16:42.844:E/AndroidRuntime(22047):位于android.widget.TextView.setText(TextView.java:4413)
03-17 09:16:42.844:E/AndroidRuntime(22047):在android.widget.TextView.setText(TextVie
mPassword.setText(phone);
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Toast.makeText(getApplicationContext(), "In onTextChanged() Method", Toast.LENGTH_SHORT).show();
if (s.length() != 0) {
switch (et.getId()) {
case R.id.etUsername: {
}
break;
case R.id.etPassword: {
if (flag){
flag = false;
return;
}
phone = formatPhoneNumber(phone);
Log.i("PHONE", "Phone NUMB IS:"+phone);
flag = true; //number formatted!!!
mPassword.setText(phone); //THE ERROR HAPPENS HERE
}
}
}
}
private boolean autochange = false;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(autochange) { // skip execution if triggered by code
autochange=false; // next change is not triggered by code
return;
}
if (s.length() != 0) {
switch (et.getId()) {
case R.id.etUsername: {
}
break;
case R.id.etPassword: {
phone = formatPhoneNumber(phone);
Log.i("PHONE", "Phone NUMB IS:"+phone);
autochange=true;
mPassword.setText(phone);
}
}
}
}
private boolean isUserCallback = true;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Toast.makeText(getApplicationContext(), "In onTextChanged() Method", Toast.LENGTH_SHORT).show();
if (s.length() != 0 && isUserCallback) {
switch (et.getId()) {
case R.id.etUsername: {
}
break;
case R.id.etPassword: {
phone = formatPhoneNumber(phone);
Log.i("PHONE", "Phone NUMB IS:"+phone);
mPassword.setText(phone); //THE ERROR HAPPENS HERE
}
}
} else {
isUserCallback = true;
}
}
this.isUserCallback = false;
mPassword.setText("asdf");
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Toast.makeText(getApplicationContext(), "In onTextChanged() Method", Toast.LENGTH_SHORT).show();
if (s.length() != 0) {
switch (et.getId()) {
case R.id.etUsername: {
}
break;
case R.id.etPassword: {
mPassword.removeTextChangedListener(theWatcher);
phone = formatPhoneNumber(phone);
Log.i("PHONE", "Phone NUMB IS:"+phone);
mPassword.setText(phone); //THE ERROR HAPPENS HERE
mPassword.addTextChangedListener(theWatcher);
}
}
}
}