0

我想EditTextClickableSpan.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

另外我应该说,这个问题并非出现在所有设备中,一些用户报告说一切正常。

你能帮我解决这个错误吗?

4

2 回答 2

2

您不应EditText在后台线程中操作 UI 组件(例如 )。

只要确保你不与EditText你的doInBackground方法中的任何人交互。

于 2013-04-04T13:15:15.710 回答
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);
       }
    }
}
于 2013-04-04T13:26:51.277 回答