0

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

また、この問題はすべてのデバイスで発生するわけではなく、一部のユーザーはすべてが正常に機能すると報告しています。

このエラーについて教えてください。

4

2 に答える 2

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 に答える