Java EditText-setText()方法不工作-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

我在想为什么这行代码会出现StackOverFlow异常时遇到了一些问题:

 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); 
        }
        }
    }
}