我想在EditText
中添加ClickableSpan
少AsynkTask
个。
我使用了下一个代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
et = (EditText)findViewById(R.id.et);
...
class makeLinksAsync extends AsyncTask<String, String, EditText> {
private EditText buffer;
protected EditText doInBackground(String... texts) {
buffer = new EditText(context); // here is an error
SpannableString spanStr = new SpannableString("word");
...
buffer.append(spanStr);
return buffer;
}
protected void onPostExecute(EditText linkedText) {
ed.setText(linkedText.getText());
}
}
}
当我使用Android2.3在不同的模拟器和我自己的设备上测试此代码时,一切都很好,这段代码运行良好。但是在将apk上传到GooglePlay后,我获得了一些崩溃报告,其中包含上述行中的错误。 日志报告是下一个:
java.lang.RuntimeException: An error occured while executing doInBackground()
...
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
...
at lubart.apps.dictionary.DictionaryActivity$makeLinksAsync.doInBackground(DictionaryActivity.java:2233) // this line is mentioned in code
另外我应该说,这个问题并非出现在所有设备中,有些用户报告说一切正常。
你能帮我解决这个错误吗?
答案 0 :(得分:2)
您不应在后台线程中操纵UI组件(例如EditText
)。
请确保您不与EditText
方法中的任何doInBackground
互动。
答案 1 :(得分:1)
这是我的答案:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
et = (EditText)findViewById(R.id.et);
...
class makeLinksAsync extends AsyncTask<String, String, SpannableStringBuilder> {
protected SpannableStringBuilder doInBackground(String... texts) {
SpannableStringBuilder buffer = new SpannableStringBuilder()
...
buffer.append("word").append(...)...;
return buffer;
}
protected void onPostExecute(SpannableStringBuilder linkedText) {
ed.setText(linkedText);
}
}
}