java.lang.StackOverflowError,具体的错误信息以及相关代码已贴出,实在找不出解决方案,各位大侠们帮帮忙
06-18 06:10:19.412: E/AndroidRuntime(505):
java.lang.StackOverflowError
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2567)
06-18 06:10:19.412: E/AndroidRuntime(505): at com.main.Display$6.onTextChanged(Display.java:204)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.sendOnTextChanged(TextView.java:6295)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2727)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2592)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.EditText.setText(EditText.java:78)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2567)
06-18 06:10:19.412: E/AndroidRuntime(505): at com.main.Display$6.onTextChanged(Display.java:204)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.sendOnTextChanged(TextView.java:6295)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2727)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2592)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.EditText.setText(EditText.java:78)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2567)
06-18 06:10:19.412: E/AndroidRuntime(505): at com.main.Display$6.onTextChanged(Display.java:204)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.sendOnTextChanged(TextView.java:6295)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2727)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2592)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.EditText.setText(EditText.java:78)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2567)
06-18 06:10:19.412: E/AndroidRuntime(505): at com.main.Display$6.onTextChanged(Display.java:204)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.sendOnTextChanged(TextView.java:6295)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2727)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2592)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.EditText.setText(EditText.java:78)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2567)
06-18 06:10:19.412: E/AndroidRuntime(505): at com.main.Display$6.onTextChanged(Display.java:204)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.sendOnTextChanged(TextView.java:6295)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2727)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2592)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.EditText.setText(EditText.java:78)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.setText(TextView.java:2567)
06-18 06:10:19.412: E/AndroidRuntime(505): at com.main.Display$6.onTextChanged(Display.java:204)
06-18 06:10:19.412: E/AndroidRuntime(505): at android.widget.TextView.sendOnT
相关代码:edittext1=(EditText)findViewById(R.id.edittext1);
edittext1.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
String strs=textview2.getText().toString();
char[] character=strs.toCharArray();
String st=edittext1.getText().toString();
char[] dechar=st.toCharArray();
int len=st.length();
if(arg3<=character.length&&dechar[arg3-1]!=character[arg3-1]){
SpannableStringBuilder style=new SpannableStringBuilder(st);
style.setSpan(new ForegroundColorSpan(Color.RED),len-1,len,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
edittext1.setText(style);
}
}
});
[解决办法]
edittext1.addTextChangedListener(new TextWatcher(){
......
public void onTextChanged() {
... ...
edittext1.setText(style);
}
上面这两个是不是导致死循环了?
[解决办法]
做个判断,如果是设置颜色的那么就不执行edittext1.setText(style);
[解决办法]
递归了吧,看起来,多大的栈都解决不了这个问题。
我之前碰到一个例子,是我之前调试vellemo运行后,栈溢出导致程序退出的问题。原因也很简单,是show一个drawable引起的:
默认的drawable是一个xml文件,比如叫aaa.xml, 真正的图片是放在drawable-xxx目录下的aaa.png,刚好系统的配置项用的是ldpi,drawable-ldpi下没有aaa.png, 则系统就会挑选默认的drawable,解析出来就是aaa.xml
依次类推,死循环了...
你要看看你的edittext1.setText(style);
中的style,是不是也有此问题。
从现象上看,应该是了。
[解决办法]
判断可以有两种:
1. 在beforeTextChanged中取出字符串和 onTexteChanged中的对比,如果一样那么说明是改变颜色的,那么就不设置颜色;
2. 在改变颜色的edittext1.setText(style); 语句之前加一个标志flag = true;说明这次是改变颜色的,下次再进来的时候不设置颜色;
[解决办法]