Search code examples
androidandroid-textinputlayout

overriding edtitext's getText() method causes stackoverflow, why?


i am subclassing TextInputEditText so that i can add a string to a password editText field. here is the subclass:

public class CustomInputEditTextWithPrefix extends TextInputEditText {


public CustomInputEditTextWithPrefix(Context context) {
    super(context);
}

public CustomInputEditTextWithPrefix(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomInputEditTextWithPrefix(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@Override
public Editable getText() {
    Editable s = (Editable) super.getText(); //why is this causing infinite stackoverflow ?
    if(s!=null && s.length()>0) {
      //salt the password
        Editable pwSalt = new SpannableStringBuilder("my secret string");
        s= pwSalt.append(s);
    }
     return s;
}

}

and the imlementation in xml is:

<com.myapp.ui.auth.ui.customviews.CustomInputEditTextWithPrefix
           android:id="@+id/password"
           android:inputType="textPassword" />

my issue is that when i execute the code the getText() override method keeps getting called over and over again. i took out the inputType but its still being called until stackoverflow. my idea was to append to the front of every string in the TextInputEditText a secret hash. What am i doing wrong ?


Solution

  • Maybe if you skip to assign a new value of s everything will be OK

       @Override
        public Editable getText() {
            Editable s = (Editable) super.getText();
            if(s!=null && s.length()>0) {
                //salt the password
                return new SpannableStringBuilder("my secret string").append(s.toString());
            }
            return s;
        }